<!DOCTYPE html>
<!-- saved from url=(0016)http://localhost -->
<html>
  <head>
    <meta charset="utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <title>web安全</title>
    <style>
        body{
            margin: 0;
        }
        #content-info{
            width: auto;
            margin: 0 auto;
            text-align: center;
        }
        #author-info{
            white-space: nowrap;
            text-overflow: ellipsis;
            overflow: hidden;
        }
        #title{
            text-overflow: ellipsis;
            white-space: nowrap;
            overflow: hidden;
            padding-top: 10px;
            margin-bottom: 2px;
            font-size: 34px;
            color: #505050;
        }
        .text{
            white-space:nowrap;
            text-overflow: ellipsis;
            display: inline-block;
            margin-right: 20px;
            margin-bottom: 2px;
            font-size: 20px;
            color: #8c8c8c;
        }
        #navBar{
            width: auto;
            height: auto;
            position: fixed;
            right:0;
            bottom: 0;
            background-color: #f0f3f4;
            overflow-y: auto;
            text-align: center;
        }
        #svg-container{
            width: 100%;
            overflow-x: scroll;
            min-width: 0px;
            margin: 0 10px;
        }
        #nav-thumbs{
            overflow-y: scroll;
            padding: 0 5px;
        }
        .nav-thumb{
            position: relative;
            margin: 10px auto;
        }
        .nav-thumb >p{
            text-align: center;
            font-size: 12px;
            margin: 4px 0 0 0;
        }
        .nav-thumb >div{
            position: relative;
            display: inline-block;
            border: 1px solid #c6cfd5;
        }
        .nav-thumb img{
            display: block;
        }
        #main-content{
            bottom: 0;
            left: 0;
            right: 0;
            background-color: #d0cfd8;
            display: flex;
            height: auto;
            flex-flow: row wrap;
            text-align:center;
        }
        #svg-container >svg{
            display: block;
            margin:10px auto;
            margin-bottom: 0;
        }
        #copyright{
            bottom: 0;
            left: 50%;
            margin: 5px auto;
            font-size: 16px;
            color: #515151;
        }
        #copyright >a{
            text-decoration: none;
            color: #77C;
        }
        .number{
            position: absolute;
            top:0;
            left:0;
            border-top:22px solid #08a1ef;
            border-right: 22px solid transparent;
        }
        .pagenum{
            font-size: 12px;
            color: #fff;
            position: absolute;
            top: -23px;
            left: 2px;
        }
            #navBar::-webkit-scrollbar{
            width: 8px;
            background-color: #f5f5f5;
        }
            #navBar::-webkit-scrollbar-track{
            -webkit-box-shadow: inset 0 0 4px rgba(0,0,0,.3);
            border-radius: 8px;
            background-color: #fff;
        }
            #navBar::-webkit-scrollbar-thumb{
            border-radius: 8px;
            -webkit-box-shadow: inset 0 0 4px rgba(0,0,0,.3);
            background-color: #6b6b70;
        }
        #navBar::-webkit-scrollbar-thumb:hover{
            background-color: #4a4a4f;
        }
</style>
  </head>
  <body>
    <div id="main-area">
      <div id="content-info">
        <div id="content-info">
          <div id="title">web安全</div>
        </div>
        <div id="author-info">
          <div id="author-name" class="text">yuguanc</div>
          <div id="share-time" class="text">2018-05-29</div>
        </div>
      </div>
      <div id="main-content">
        <div id="svg-container"><svg ed:name="Page-1" xmlns:ed="http://www.edrawsoft.cn/xml/2017/SVGExtensions/" ed:vSpacing="30" height="1526" preserveAspectRadio="xMinYMin meet" ed:hSpacing="30" viewBox="0 0 1627 1527" xmlns="http://www.w3.org/2000/svg" xmlns:ev="http://www.w3.org/2001/xml-events" id="page1" xmlns:xlink="http://www.w3.org/1999/xlink" width="1627">
    <style type="text/css"><![CDATA[
g[ed\:togtopicid],g[ed\:hyperlink],g[ed\:comment],g[ed\:note] {cursor:pointer;}
g[id] {-moz-user-select: none;-ms-user-select: none;user-select: none;}
svg text::selection,svg tspan::selection{background-color: #4285f4;color: #ffffff;fill: #ffffff;}
.st14 {fill:#303030;font-family:宋体;font-size:10pt}
.st13 {fill:#303030;font-family:宋体;font-size:12pt}
.st15 {fill:#303030;font-family:宋体;font-size:14pt}
]]></style>
    <defs>
        <linearGradient x2="0%" x1="0%" id="lg5" y2="100%" y1="0%">
            <stop stop-color="#ffffff" offset="0"/>
            <stop stop-color="#f0f5f0" offset="0.25"/>
            <stop stop-color="#e1ebe1" offset="0.75"/>
            <stop stop-color="#c8d7c8" offset="1"/>
        </linearGradient>
    </defs>
    <rect height="1527" fill="#ffffff" y="0" width="1627" x="0"/>
    <g transform="translate(464,743.4)" ed:parentid="101" ed:height="40" ed:layout="leftmap" id="106" ed:width="131">
        <path stroke="#4486b1" stroke-linejoin="round" fill="#f5f9fe" d="M4,0L127,0C129.2,0,131,1.8,131,4L131,36C131,38.2,129.2,40,127,40L4,40C1.8,40,0,38.2,0,36L0,4C0,1.8,1.8,0,4,0z"/>
        <path transform="translate(204.25,20)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="107" d="M-10.3,0C-32.2,0,-52.7,0,-73.3,0" stroke-linecap="round"/>
        <text class="st13">
            <tspan textLength="88" style="white-space:pre" lengthAdjust="spacing" y="26.5" x="22">web基础安全</tspan>
        </text>
    </g>
    <g transform="translate(888,477.05)" ed:parentid="101" ed:height="40" ed:layout="rightmap" id="108" ed:width="179">
        <path stroke="#4486b1" stroke-linejoin="round" fill="#f5f9fe" d="M4,0L175,0C177.2,0,179,1.8,179,4L179,36C179,38.2,177.2,40,175,40L4,40C1.8,40,0,38.2,0,36L0,4C0,1.8,1.8,0,4,0z"/>
        <path transform="translate(-73.25,153.18)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="109" d="M-33.5,102.2C-0.6,32,-14.2,-133.2,73.3,-133.2" stroke-linecap="round"/>
        <text class="st13">
            <tspan textLength="136" style="white-space:pre" lengthAdjust="spacing" y="26.5" x="22">业务安全/设计缺陷</tspan>
        </text>
    </g>
    <g transform="translate(888,1111.95)" ed:parentid="101" ed:height="40" ed:layout="rightmap" id="110" ed:width="179">
        <path stroke="#4486b1" stroke-linejoin="round" fill="#f5f9fe" d="M4,0L175,0C177.2,0,179,1.8,179,4L179,36C179,38.2,177.2,40,175,40L4,40C1.8,40,0,38.2,0,36L0,4C0,1.8,1.8,0,4,0z"/>
        <path transform="translate(-73.25,-164.27)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="111" d="M-36.7,-153.3C0.7,-64.5,-33.2,184.3,73.3,184.3" stroke-linecap="round"/>
        <text class="st13">
            <tspan textLength="136" style="white-space:pre" lengthAdjust="spacing" y="26.5" x="22">业务设计/风控安全</tspan>
        </text>
    </g>
    <g transform="translate(375,256.75)" ed:parentid="106" ed:height="20.5" ed:layout="leftmap" id="112" ed:width="60">
        <path transform="translate(74.5,263.57)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="113" d="M14.5,243.1C-5.8,243.1,14.5,-243.1,-14.5,-243.1" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">文件处理</tspan>
        </text>
    </g>
    <g transform="translate(362,402.75)" ed:parentid="106" ed:height="20.5" ed:layout="leftmap" id="114" ed:width="73">
        <path transform="translate(87.5,190.57)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="115" d="M14.5,170.1C-5.8,170.1,14.5,-170.1,-14.5,-170.1" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L73,20.5"/>
        <text class="st14">
            <tspan textLength="65" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">第三方应用</tspan>
        </text>
    </g>
    <g transform="translate(375,475.75)" ed:parentid="106" ed:height="20.5" ed:layout="leftmap" id="116" ed:width="60">
        <path transform="translate(74.5,154.07)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="117" d="M14.5,133.6C-5.8,133.6,14.5,-133.6,-14.5,-133.6" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">权限控制</tspan>
        </text>
    </g>
    <g transform="translate(375,577.95)" ed:parentid="106" ed:height="20.5" ed:layout="leftmap" id="118" ed:width="60">
        <path transform="translate(74.5,102.98)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="119" d="M14.5,82.5C-5.8,82.5,14.5,-82.5,-14.5,-82.5" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">信息泄露</tspan>
        </text>
    </g>
    <g transform="translate(375,709.35)" ed:parentid="106" ed:height="20.5" ed:layout="leftmap" id="120" ed:width="60">
        <path transform="translate(74.5,37.27)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="121" d="M14.5,16.8C-0.9,16.8,3.1,-16.8,-14.5,-16.8" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">默认配置</tspan>
        </text>
    </g>
    <g transform="translate(399,782.35)" ed:parentid="106" ed:height="20.5" ed:layout="leftmap" id="122" ed:width="36">
        <path transform="translate(50.5,0.77)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="123" d="M14.5,-19.7C-1.5,-19.7,4.5,19.7,-14.5,19.7" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L36,20.5"/>
        <text class="st14">
            <tspan textLength="28" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">SSRF</tspan>
        </text>
    </g>
    <g transform="translate(401,928.35)" ed:parentid="106" ed:height="20.5" ed:layout="leftmap" id="124" ed:width="34">
        <path transform="translate(48.5,-72.23)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="125" d="M14.5,-92.7C-5.8,-92.7,14.5,92.7,-14.5,92.7" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L34,20.5"/>
        <text class="st14">
            <tspan textLength="26" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">前端</tspan>
        </text>
    </g>
    <g transform="translate(401,1176.55)" ed:parentid="106" ed:height="20.5" ed:layout="leftmap" id="126" ed:width="34">
        <path transform="translate(48.5,-196.33)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="127" d="M14.5,-216.8C-5.8,-216.8,14.5,216.8,-14.5,216.8" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L34,20.5"/>
        <text class="st14">
            <tspan textLength="26" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">注入</tspan>
        </text>
    </g>
    <g transform="translate(401,1322.55)" ed:parentid="106" ed:height="20.5" ed:layout="leftmap" id="128" ed:width="34">
        <path transform="translate(48.5,-269.33)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="129" d="M14.5,-289.8C-5.8,-289.8,14.5,289.8,-14.5,289.8" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L34,20.5"/>
        <text class="st14">
            <tspan textLength="26" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">会话</tspan>
        </text>
    </g>
    <g transform="translate(312,227.55)" ed:parentid="112" ed:height="20.5" ed:layout="leftmap" id="130" ed:width="34">
        <path transform="translate(48.5,35.1)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="131" d="M14.5,14.6C-0.5,14.6,2,-14.6,-14.5,-14.6" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L34,20.5"/>
        <text class="st14">
            <tspan textLength="26" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">上传</tspan>
        </text>
    </g>
    <g transform="translate(312,315.15)" ed:parentid="112" ed:height="20.5" ed:layout="leftmap" id="132" ed:width="34">
        <path transform="translate(48.5,-8.7)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="133" d="M14.5,-29.2C-3.3,-29.2,8.6,29.2,-14.5,29.2" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L34,20.5"/>
        <text class="st14">
            <tspan textLength="26" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">下载</tspan>
        </text>
    </g>
    <g transform="translate(312,344.35)" ed:parentid="112" ed:height="20.5" ed:layout="leftmap" id="134" ed:width="34">
        <path transform="translate(48.5,-23.3)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="135" d="M14.5,-43.8C-5.2,-43.8,13,43.8,-14.5,43.8" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L34,20.5"/>
        <text class="st14">
            <tspan textLength="26" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">读取</tspan>
        </text>
    </g>
    <g transform="translate(236,169.15)" ed:parentid="130" ed:height="20.5" ed:layout="leftmap" id="136" ed:width="47">
        <path transform="translate(61.5,49.7)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="137" d="M14.5,29.2C-3.3,29.2,8.6,-29.2,-14.5,-29.2" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L47,20.5"/>
        <text class="st14">
            <tspan textLength="39" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">文件名</tspan>
        </text>
    </g>
    <g transform="translate(223,198.35)" ed:parentid="130" ed:height="20.5" ed:layout="leftmap" id="138" ed:width="60">
        <path transform="translate(74.5,35.1)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="139" d="M14.5,14.6C-0.5,14.6,2,-14.6,-14.5,-14.6" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">存放路径</tspan>
        </text>
    </g>
    <g transform="translate(210,227.55)" ed:parentid="130" ed:height="20.5" ed:layout="leftmap" id="140" ed:width="73">
        <path transform="translate(87.5,20.5)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="141" d="M14.5,0C2.9,0,-5.8,0,-14.5,0" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L73,20.5"/>
        <text class="st14">
            <tspan textLength="65" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">服务器配置</tspan>
        </text>
    </g>
    <g transform="translate(214,256.75)" ed:parentid="130" ed:height="20.5" ed:layout="leftmap" id="142" ed:width="69">
        <path transform="translate(83.5,5.9)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="143" d="M14.5,-14.6C-0.5,-14.6,2,14.6,-14.5,14.6" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L69,20.5"/>
        <text class="st14">
            <tspan textLength="61" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">flash上传</tspan>
        </text>
    </g>
    <g transform="translate(249,285.95)" ed:parentid="130" ed:height="20.5" ed:layout="leftmap" id="144" ed:width="34">
        <path transform="translate(48.5,-8.7)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="145" d="M14.5,-29.2C-3.3,-29.2,8.6,29.2,-14.5,29.2" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L34,20.5"/>
        <text class="st14">
            <tspan textLength="26" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">后缀</tspan>
        </text>
    </g>
    <g transform="translate(273,373.55)" ed:parentid="114" ed:height="20.5" ed:layout="leftmap" id="146" ed:width="60">
        <path transform="translate(74.5,35.1)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="147" d="M14.5,14.6C-0.5,14.6,2,-14.6,-14.5,-14.6" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">开发框架</tspan>
        </text>
    </g>
    <g transform="translate(273,402.75)" ed:parentid="114" ed:height="20.5" ed:layout="leftmap" id="148" ed:width="60">
        <path transform="translate(74.5,20.5)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="149" d="M14.5,0C2.9,0,-5.8,0,-14.5,0" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">开发语言</tspan>
        </text>
    </g>
    <g transform="translate(299,431.95)" ed:parentid="114" ed:height="20.5" ed:layout="leftmap" id="150" ed:width="34">
        <path transform="translate(48.5,5.9)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="151" d="M14.5,-14.6C-0.5,-14.6,2,14.6,-14.5,14.6" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L34,20.5"/>
        <text class="st14">
            <tspan textLength="26" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">容器</tspan>
        </text>
    </g>
    <g transform="translate(286,461.15)" ed:parentid="116" ed:height="20.5" ed:layout="leftmap" id="152" ed:width="60">
        <path transform="translate(74.5,27.8)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="153" d="M14.5,7.3C1.2,7.3,-1.8,-7.3,-14.5,-7.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">垂直权限</tspan>
        </text>
    </g>
    <g transform="translate(286,490.35)" ed:parentid="116" ed:height="20.5" ed:layout="leftmap" id="154" ed:width="60">
        <path transform="translate(74.5,13.2)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="155" d="M14.5,-7.3C1.2,-7.3,-1.8,7.3,-14.5,7.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">水平权限</tspan>
        </text>
    </g>
    <g transform="translate(286,519.55)" ed:parentid="118" ed:height="20.5" ed:layout="leftmap" id="156" ed:width="60">
        <path transform="translate(74.5,49.7)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="157" d="M14.5,29.2C-3.3,29.2,8.6,-29.2,-14.5,-29.2" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">用户信息</tspan>
        </text>
    </g>
    <g transform="translate(240,592.55)" ed:parentid="118" ed:height="20.5" ed:layout="leftmap" id="158" ed:width="106">
        <path transform="translate(120.5,13.2)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="159" d="M14.5,-7.3C1.2,-7.3,-1.8,7.3,-14.5,7.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L106,20.5"/>
        <text class="st14">
            <tspan textLength="98" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">配置/服务器信息</tspan>
        </text>
    </g>
    <g transform="translate(151,548.75)" ed:parentid="158" ed:height="20.5" ed:layout="leftmap" id="160" ed:width="60">
        <path transform="translate(74.5,42.4)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="161" d="M14.5,21.9C-2,21.9,5.5,-21.9,-14.5,-21.9" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">错误信息</tspan>
        </text>
    </g>
    <g transform="translate(151,577.95)" ed:parentid="158" ed:height="20.5" ed:layout="leftmap" id="162" ed:width="60">
        <path transform="translate(74.5,27.8)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="163" d="M14.5,7.3C1.2,7.3,-1.8,-7.3,-14.5,-7.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">日志信息</tspan>
        </text>
    </g>
    <g transform="translate(151,607.15)" ed:parentid="158" ed:height="20.5" ed:layout="leftmap" id="164" ed:width="60">
        <path transform="translate(74.5,13.2)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="165" d="M14.5,-7.3C1.2,-7.3,-1.8,7.3,-14.5,7.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">目录遍历</tspan>
        </text>
    </g>
    <g transform="translate(151,636.35)" ed:parentid="158" ed:height="20.5" ed:layout="leftmap" id="166" ed:width="60">
        <path transform="translate(74.5,-1.4)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="167" d="M14.5,-21.9C-2,-21.9,5.5,21.9,-14.5,21.9" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">备份文件</tspan>
        </text>
    </g>
    <g transform="translate(286,665.55)" ed:parentid="120" ed:height="20.5" ed:layout="leftmap" id="168" ed:width="60">
        <path transform="translate(74.5,42.4)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="169" d="M14.5,21.9C-2,21.9,5.5,-21.9,-14.5,-21.9" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">默认后台</tspan>
        </text>
    </g>
    <g transform="translate(286,694.75)" ed:parentid="120" ed:height="20.5" ed:layout="leftmap" id="170" ed:width="60">
        <path transform="translate(74.5,27.8)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="171" d="M14.5,7.3C1.2,7.3,-1.8,-7.3,-14.5,-7.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">默认密码</tspan>
        </text>
    </g>
    <g transform="translate(234,723.95)" ed:parentid="120" ed:height="20.5" ed:layout="leftmap" id="172" ed:width="112">
        <path transform="translate(126.5,13.2)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="173" d="M14.5,-7.3C1.2,-7.3,-1.8,7.3,-14.5,7.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L112,20.5"/>
        <text class="st14">
            <tspan textLength="104" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">应用程序默认配置</tspan>
        </text>
    </g>
    <g transform="translate(247,753.15)" ed:parentid="120" ed:height="20.5" ed:layout="leftmap" id="174" ed:width="99">
        <path transform="translate(113.5,-1.4)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="175" d="M14.5,-21.9C-2,-21.9,5.5,21.9,-14.5,21.9" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L99,20.5"/>
        <text class="st14">
            <tspan textLength="91" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">服务器默认配置</tspan>
        </text>
    </g>
    <g transform="translate(343,855.35)" ed:parentid="124" ed:height="20.5" ed:layout="leftmap" id="176" ed:width="29">
        <path transform="translate(43.5,57)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="177" d="M14.5,36.5C-4.4,36.5,11.2,-36.5,-14.5,-36.5" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L29,20.5"/>
        <text class="st14">
            <tspan textLength="21" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">XSS</tspan>
        </text>
    </g>
    <g transform="translate(336,928.35)" ed:parentid="124" ed:height="20.5" ed:layout="leftmap" id="178" ed:width="36">
        <path transform="translate(50.5,20.5)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="179" d="M14.5,0C2.9,0,-5.8,0,-14.5,0" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L36,20.5"/>
        <text class="st14">
            <tspan textLength="28" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">CSRF</tspan>
        </text>
    </g>
    <g transform="translate(280,957.55)" ed:parentid="124" ed:height="20.5" ed:layout="leftmap" id="180" ed:width="92">
        <path transform="translate(106.5,5.9)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="181" d="M14.5,-14.6C-0.5,-14.6,2,14.6,-14.5,14.6" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L92,20.5"/>
        <text class="st14">
            <tspan textLength="84" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">clickjacking</tspan>
        </text>
    </g>
    <g transform="translate(336,986.75)" ed:parentid="124" ed:height="20.5" ed:layout="leftmap" id="182" ed:width="36">
        <path transform="translate(50.5,-8.7)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="183" d="M14.5,-29.2C-3.3,-29.2,8.6,29.2,-14.5,29.2" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L36,20.5"/>
        <text class="st14">
            <tspan textLength="28" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">xsch</tspan>
        </text>
    </g>
    <g transform="translate(336,1030.55)" ed:parentid="124" ed:height="20.5" ed:layout="leftmap" id="184" ed:width="36">
        <path transform="translate(50.5,-30.6)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="185" d="M14.5,-51.1C-5.6,-51.1,14.1,51.1,-14.5,51.1" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L36,20.5"/>
        <text class="st14">
            <tspan textLength="28" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">json</tspan>
        </text>
    </g>
    <g transform="translate(267,811.55)" ed:parentid="176" ed:height="20.5" ed:layout="leftmap" id="186" ed:width="47">
        <path transform="translate(61.5,42.4)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="187" d="M14.5,21.9C-2,21.9,5.5,-21.9,-14.5,-21.9" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L47,20.5"/>
        <text class="st14">
            <tspan textLength="39" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">反射型</tspan>
        </text>
    </g>
    <g transform="translate(267,840.75)" ed:parentid="176" ed:height="20.5" ed:layout="leftmap" id="188" ed:width="47">
        <path transform="translate(61.5,27.8)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="189" d="M14.5,7.3C1.2,7.3,-1.8,-7.3,-14.5,-7.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L47,20.5"/>
        <text class="st14">
            <tspan textLength="39" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">存储型</tspan>
        </text>
    </g>
    <g transform="translate(257,869.95)" ed:parentid="176" ed:height="20.5" ed:layout="leftmap" id="190" ed:width="57">
        <path transform="translate(71.5,13.2)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="191" d="M14.5,-7.3C1.2,-7.3,-1.8,7.3,-14.5,7.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L57,20.5"/>
        <text class="st14">
            <tspan textLength="49" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">dom xss</tspan>
        </text>
    </g>
    <g transform="translate(243,899.15)" ed:parentid="176" ed:height="20.5" ed:layout="leftmap" id="192" ed:width="71">
        <path transform="translate(85.5,-1.4)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="193" d="M14.5,-21.9C-2,-21.9,5.5,21.9,-14.5,21.9" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L71,20.5"/>
        <text class="st14">
            <tspan textLength="63" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">flash xss</tspan>
        </text>
    </g>
    <g transform="translate(245,1015.95)" ed:parentid="184" ed:height="20.5" ed:layout="leftmap" id="194" ed:width="62">
        <path transform="translate(76.5,27.8)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="195" d="M14.5,7.3C1.2,7.3,-1.8,-7.3,-14.5,-7.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L62,20.5"/>
        <text class="st14">
            <tspan textLength="54" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">json劫持</tspan>
        </text>
    </g>
    <g transform="translate(273,1045.15)" ed:parentid="184" ed:height="20.5" ed:layout="leftmap" id="196" ed:width="34">
        <path transform="translate(48.5,13.2)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="197" d="M14.5,-7.3C1.2,-7.3,-1.8,7.3,-14.5,7.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L34,20.5"/>
        <text class="st14">
            <tspan textLength="26" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">权限</tspan>
        </text>
    </g>
    <g transform="translate(343,1074.35)" ed:parentid="126" ed:height="20.5" ed:layout="leftmap" id="198" ed:width="29">
        <path transform="translate(43.5,71.6)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="199" d="M14.5,51.1C-5.6,51.1,14.1,-51.1,-14.5,-51.1" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L29,20.5"/>
        <text class="st14">
            <tspan textLength="21" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">sql</tspan>
        </text>
    </g>
    <g transform="translate(343,1103.55)" ed:parentid="126" ed:height="20.5" ed:layout="leftmap" id="200" ed:width="29">
        <path transform="translate(43.5,57)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="201" d="M14.5,36.5C-4.4,36.5,11.2,-36.5,-14.5,-36.5" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L29,20.5"/>
        <text class="st14">
            <tspan textLength="21" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">xml</tspan>
        </text>
    </g>
    <g transform="translate(336,1132.75)" ed:parentid="126" ed:height="20.5" ed:layout="leftmap" id="202" ed:width="36">
        <path transform="translate(50.5,42.4)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="203" d="M14.5,21.9C-2,21.9,5.5,-21.9,-14.5,-21.9" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L36,20.5"/>
        <text class="st14">
            <tspan textLength="28" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">soap</tspan>
        </text>
    </g>
    <g transform="translate(325,1161.95)" ed:parentid="126" ed:height="20.5" ed:layout="leftmap" id="204" ed:width="47">
        <path transform="translate(61.5,27.8)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="205" d="M14.5,7.3C1.2,7.3,-1.8,-7.3,-14.5,-7.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L47,20.5"/>
        <text class="st14">
            <tspan textLength="39" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">邮件头</tspan>
        </text>
    </g>
    <g transform="translate(336,1191.15)" ed:parentid="126" ed:height="20.5" ed:layout="leftmap" id="206" ed:width="36">
        <path transform="translate(50.5,13.2)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="207" d="M14.5,-7.3C1.2,-7.3,-1.8,7.3,-14.5,7.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L36,20.5"/>
        <text class="st14">
            <tspan textLength="28" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">crlf</tspan>
        </text>
    </g>
    <g transform="translate(312,1220.35)" ed:parentid="126" ed:height="20.5" ed:layout="leftmap" id="208" ed:width="60">
        <path transform="translate(74.5,-1.4)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="209" d="M14.5,-21.9C-2,-21.9,5.5,21.9,-14.5,21.9" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">命令执行</tspan>
        </text>
    </g>
    <g transform="translate(312,1264.15)" ed:parentid="126" ed:height="20.5" ed:layout="leftmap" id="210" ed:width="60">
        <path transform="translate(74.5,-23.3)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="211" d="M14.5,-43.8C-5.2,-43.8,13,43.8,-14.5,43.8" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">代码执行</tspan>
        </text>
    </g>
    <g transform="translate(223,1249.55)" ed:parentid="210" ed:height="20.5" ed:layout="leftmap" id="212" ed:width="60">
        <path transform="translate(74.5,27.8)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="213" d="M14.5,7.3C1.2,7.3,-1.8,-7.3,-14.5,-7.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">文件包含</tspan>
        </text>
    </g>
    <g transform="translate(223,1278.75)" ed:parentid="210" ed:height="20.5" ed:layout="leftmap" id="214" ed:width="60">
        <path transform="translate(74.5,13.2)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="215" d="M14.5,-7.3C1.2,-7.3,-1.8,7.3,-14.5,7.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">注入脚本</tspan>
        </text>
    </g>
    <g transform="translate(312,1307.95)" ed:parentid="128" ed:height="20.5" ed:layout="leftmap" id="216" ed:width="60">
        <path transform="translate(74.5,27.8)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="217" d="M14.5,7.3C1.2,7.3,-1.8,-7.3,-14.5,-7.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">绘画固定</tspan>
        </text>
    </g>
    <g transform="translate(279,1337.15)" ed:parentid="128" ed:height="20.5" ed:layout="leftmap" id="218" ed:width="93">
        <path transform="translate(107.5,13.2)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="219" d="M14.5,-7.3C1.2,-7.3,-1.8,7.3,-14.5,7.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L93,20.5"/>
        <text class="st14">
            <tspan textLength="85" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">权限/身份控制</tspan>
        </text>
    </g>
    <g transform="translate(1096,311.6)" ed:parentid="108" ed:height="20.5" ed:layout="rightmap" id="220" ed:width="60">
        <path transform="translate(-14.5,102.98)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="221" d="M-14.5,82.5C5.8,82.5,-14.5,-82.5,14.5,-82.5" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">用户身份</tspan>
        </text>
    </g>
    <g transform="translate(1096,574.4)" ed:parentid="108" ed:height="20.5" ed:layout="rightmap" id="222" ed:width="73">
        <path transform="translate(-14.5,-28.42)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="223" d="M-14.5,-48.9C5.5,-48.9,-13.9,48.9,14.5,48.9" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L73,20.5"/>
        <text class="st14">
            <tspan textLength="65" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">业务一致性</tspan>
        </text>
    </g>
    <g transform="translate(1096,705.8)" ed:parentid="108" ed:height="20.5" ed:layout="rightmap" id="226" ed:width="60">
        <path transform="translate(-14.5,-94.12)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="227" d="M-14.5,-114.6C5.8,-114.6,-14.5,114.6,14.5,114.6" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">业务接口</tspan>
        </text>
    </g>
    <g transform="translate(1096,764.2)" ed:parentid="108" ed:height="20.5" ed:layout="rightmap" id="228" ed:width="60">
        <path transform="translate(-14.5,-123.32)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="229" d="M-14.5,-143.8C5.8,-143.8,-14.5,143.8,14.5,143.8" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">用户信息</tspan>
        </text>
    </g>
    <g transform="translate(1096,808)" ed:parentid="108" ed:height="20.5" ed:layout="rightmap" id="230" ed:width="73">
        <path transform="translate(-14.5,-145.22)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="231" d="M-14.5,-165.7C5.8,-165.7,-14.5,165.7,14.5,165.7" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L73,20.5"/>
        <text class="st14">
            <tspan textLength="65" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">数据有效性</tspan>
        </text>
    </g>
    <g transform="translate(1185,267.8)" ed:parentid="220" ed:height="20.5" ed:layout="rightmap" id="232" ed:width="34">
        <path transform="translate(-14.5,42.4)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="233" d="M-14.5,21.9C2,21.9,-5.5,-21.9,14.5,-21.9" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L34,20.5"/>
        <text class="st14">
            <tspan textLength="26" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">登录</tspan>
        </text>
    </g>
    <g transform="translate(1185,413.8)" ed:parentid="220" ed:height="20.5" ed:layout="rightmap" id="234" ed:width="60">
        <path transform="translate(-14.5,-30.6)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="235" d="M-14.5,-51.1C5.6,-51.1,-14.1,51.1,14.5,51.1" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">密码找回</tspan>
        </text>
    </g>
    <g transform="translate(1185,457.6)" ed:parentid="220" ed:height="20.5" ed:layout="rightmap" id="236" ed:width="34">
        <path transform="translate(-14.5,-52.5)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="237" d="M-14.5,-73C5.8,-73,-14.5,73,14.5,73" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L34,20.5"/>
        <text class="st14">
            <tspan textLength="26" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">注册</tspan>
        </text>
    </g>
    <g transform="translate(1248,180.2)" ed:parentid="232" ed:height="20.5" ed:layout="rightmap" id="238" ed:width="34">
        <path transform="translate(-14.5,64.3)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="239" d="M-14.5,43.8C5.2,43.8,-13,-43.8,14.5,-43.8" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L34,20.5"/>
        <text class="st14">
            <tspan textLength="26" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">传输</tspan>
        </text>
    </g>
    <g transform="translate(1248,282.4)" ed:parentid="232" ed:height="20.5" ed:layout="rightmap" id="240" ed:width="106">
        <path transform="translate(-14.5,13.2)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="241" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L106,20.5"/>
        <text class="st14">
            <tspan textLength="98" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">cppkie/session</tspan>
        </text>
    </g>
    <g transform="translate(1248,370)" ed:parentid="232" ed:height="20.5" ed:layout="rightmap" id="242" ed:width="60">
        <path transform="translate(-14.5,-30.6)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="243" d="M-14.5,-51.1C5.6,-51.1,-14.1,51.1,14.5,51.1" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">暴力破解</tspan>
        </text>
    </g>
    <g transform="translate(1248,443)" ed:parentid="236" ed:height="20.5" ed:layout="rightmap" id="244" ed:width="60">
        <path transform="translate(-14.5,27.8)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="245" d="M-14.5,7.3C-1.2,7.3,1.8,-7.3,14.5,-7.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">重复用户</tspan>
        </text>
    </g>
    <g transform="translate(1248,472.2)" ed:parentid="236" ed:height="20.5" ed:layout="rightmap" id="246" ed:width="119">
        <path transform="translate(-14.5,13.2)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="247" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L119,20.5"/>
        <text class="st14">
            <tspan textLength="111" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">注册成功/输出内容</tspan>
        </text>
    </g>
    <g transform="translate(1311,151)" ed:parentid="238" ed:height="20.5" ed:layout="rightmap" id="248" ed:width="86">
        <path transform="translate(-14.5,35.1)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="249" d="M-14.5,14.6C0.5,14.6,-2,-14.6,14.5,-14.6" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L86,20.5"/>
        <text class="st14">
            <tspan textLength="78" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">前端处理密码</tspan>
        </text>
    </g>
    <g transform="translate(1311,180.2)" ed:parentid="238" ed:height="20.5" ed:layout="rightmap" id="250" ed:width="141">
        <path transform="translate(-14.5,20.5)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="251" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L141,20.5"/>
        <text class="st14">
            <tspan textLength="133" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">认证token传递/被劫持</tspan>
        </text>
    </g>
    <g transform="translate(1311,209.4)" ed:parentid="238" ed:height="20.5" ed:layout="rightmap" id="252" ed:width="81">
        <path transform="translate(-14.5,5.9)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="253" d="M-14.5,-14.6C0.5,-14.6,-2,14.6,14.5,14.6" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L81,20.5"/>
        <text class="st14">
            <tspan textLength="73" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">get请求威胁</tspan>
        </text>
    </g>
    <g transform="translate(1383,238.6)" ed:parentid="240" ed:height="20.5" ed:layout="rightmap" id="254" ed:width="93">
        <path transform="translate(-14.5,42.4)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="255" d="M-14.5,21.9C2,21.9,-5.5,-21.9,14.5,-21.9" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L93,20.5"/>
        <text class="st14">
            <tspan textLength="85" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">用户权限/身份</tspan>
        </text>
    </g>
    <g transform="translate(1383,267.8)" ed:parentid="240" ed:height="20.5" ed:layout="rightmap" id="256" ed:width="82">
        <path transform="translate(-14.5,27.8)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="257" d="M-14.5,7.3C-1.2,7.3,1.8,-7.3,14.5,-7.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L82,20.5"/>
        <text class="st14">
            <tspan textLength="74" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">登陆无token</tspan>
        </text>
    </g>
    <g transform="translate(1383,297)" ed:parentid="240" ed:height="20.5" ed:layout="rightmap" id="258" ed:width="82">
        <path transform="translate(-14.5,13.2)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="259" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L82,20.5"/>
        <text class="st14">
            <tspan textLength="74" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">token弱算法</tspan>
        </text>
    </g>
    <g transform="translate(1383,326.2)" ed:parentid="240" ed:height="20.5" ed:layout="rightmap" id="260" ed:width="60">
        <path transform="translate(-14.5,-1.4)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="261" d="M-14.5,-21.9C2,-21.9,-5.5,21.9,14.5,21.9" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">会话固定</tspan>
        </text>
    </g>
    <g transform="translate(1337,355.4)" ed:parentid="242" ed:height="20.5" ed:layout="rightmap" id="262" ed:width="34">
        <path transform="translate(-14.5,27.8)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="263" d="M-14.5,7.3C-1.2,7.3,1.8,-7.3,14.5,-7.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L34,20.5"/>
        <text class="st14">
            <tspan textLength="26" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">撞库</tspan>
        </text>
    </g>
    <g transform="translate(1337,384.6)" ed:parentid="242" ed:height="20.5" ed:layout="rightmap" id="264" ed:width="86">
        <path transform="translate(-14.5,13.2)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="265" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L86,20.5"/>
        <text class="st14">
            <tspan textLength="78" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">注册用户探测</tspan>
        </text>
    </g>
    <g transform="translate(1198,545.2)" ed:parentid="222" ed:height="20.5" ed:layout="rightmap" id="266" ed:width="60">
        <path transform="translate(-14.5,35.1)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="267" d="M-14.5,14.6C0.5,14.6,-2,-14.6,14.5,-14.6" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">购买逻辑</tspan>
        </text>
    </g>
    <g transform="translate(1198,618.2)" ed:parentid="222" ed:height="20.5" ed:layout="rightmap" id="268" ed:width="60">
        <path transform="translate(-14.5,-1.4)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="269" d="M-14.5,-21.9C2,-21.9,-5.5,21.9,14.5,21.9" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">支付逻辑</tspan>
        </text>
    </g>
    <g transform="translate(1198,647.4)" ed:parentid="222" ed:height="20.5" ed:layout="rightmap" id="270" ed:width="86">
        <path transform="translate(-14.5,-16)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="271" d="M-14.5,-36.5C4.4,-36.5,-11.2,36.5,14.5,36.5" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L86,20.5"/>
        <text class="st14">
            <tspan textLength="78" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">业务流程顺序</tspan>
        </text>
    </g>
    <g transform="translate(1287,501.4)" ed:parentid="266" ed:height="20.5" ed:layout="rightmap" id="272" ed:width="60">
        <path transform="translate(-14.5,42.4)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="273" d="M-14.5,21.9C2,21.9,-5.5,-21.9,14.5,-21.9" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">商品价格</tspan>
        </text>
    </g>
    <g transform="translate(1287,530.6)" ed:parentid="266" ed:height="20.5" ed:layout="rightmap" id="274" ed:width="60">
        <path transform="translate(-14.5,27.8)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="275" d="M-14.5,7.3C-1.2,7.3,1.8,-7.3,14.5,-7.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">商品数量</tspan>
        </text>
    </g>
    <g transform="translate(1287,559.8)" ed:parentid="266" ed:height="20.5" ed:layout="rightmap" id="276" ed:width="60">
        <path transform="translate(-14.5,13.2)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="277" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">商品编号</tspan>
        </text>
    </g>
    <g transform="translate(1287,589)" ed:parentid="266" ed:height="20.5" ed:layout="rightmap" id="278" ed:width="60">
        <path transform="translate(-14.5,-1.4)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="279" d="M-14.5,-21.9C2,-21.9,-5.5,21.9,14.5,21.9" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">购买限制</tspan>
        </text>
    </g>
    <g transform="translate(1185,676.6)" ed:parentid="226" ed:height="20.5" ed:layout="rightmap" id="280" ed:width="34">
        <path transform="translate(-14.5,35.1)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="281" d="M-14.5,14.6C0.5,14.6,-2,-14.6,14.5,-14.6" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L34,20.5"/>
        <text class="st14">
            <tspan textLength="26" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">短信</tspan>
        </text>
    </g>
    <g transform="translate(1185,705.8)" ed:parentid="226" ed:height="20.5" ed:layout="rightmap" id="282" ed:width="34">
        <path transform="translate(-14.5,20.5)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="283" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L34,20.5"/>
        <text class="st14">
            <tspan textLength="26" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">邮箱</tspan>
        </text>
    </g>
    <g transform="translate(1185,735)" ed:parentid="226" ed:height="20.5" ed:layout="rightmap" id="284" ed:width="86">
        <path transform="translate(-14.5,5.9)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="285" d="M-14.5,-14.6C0.5,-14.6,-2,14.6,14.5,14.6" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L86,20.5"/>
        <text class="st14">
            <tspan textLength="78" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">其他具体业务</tspan>
        </text>
    </g>
    <g transform="translate(1185,764.2)" ed:parentid="228" ed:height="20.5" ed:layout="rightmap" id="286" ed:width="86">
        <path transform="translate(-14.5,20.5)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="287" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L86,20.5"/>
        <text class="st14">
            <tspan textLength="78" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">用户信息泄露</tspan>
        </text>
    </g>
    <g transform="translate(1198,793.4)" ed:parentid="230" ed:height="20.5" ed:layout="rightmap" id="288" ed:width="34">
        <path transform="translate(-14.5,27.8)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="289" d="M-14.5,7.3C-1.2,7.3,1.8,-7.3,14.5,-7.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L34,20.5"/>
        <text class="st14">
            <tspan textLength="26" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">重放</tspan>
        </text>
    </g>
    <g transform="translate(1198,822.6)" ed:parentid="230" ed:height="20.5" ed:layout="rightmap" id="290" ed:width="34">
        <path transform="translate(-14.5,13.2)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="291" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L34,20.5"/>
        <text class="st14">
            <tspan textLength="26" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">并发</tspan>
        </text>
    </g>
    <g transform="translate(1096,917.3)" ed:parentid="110" ed:height="20.5" ed:layout="rightmap" id="292" ed:width="60">
        <path transform="translate(-14.5,117.57)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="293" d="M-14.5,97.1C5.8,97.1,-14.5,-97.1,14.5,-97.1" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">账号体系</tspan>
        </text>
    </g>
    <g transform="translate(1096,1165.5)" ed:parentid="110" ed:height="20.5" ed:layout="rightmap" id="294" ed:width="86">
        <path transform="translate(-14.5,-6.53)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="295" d="M-14.5,-27C2.9,-27,-7.8,27,14.5,27" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L86,20.5"/>
        <text class="st14">
            <tspan textLength="78" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">其他具体业务</tspan>
        </text>
    </g>
    <g transform="translate(1185,888.1)" ed:parentid="292" ed:height="20.5" ed:layout="rightmap" id="296" ed:width="138">
        <path transform="translate(-14.5,35.1)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="297" d="M-14.5,14.6C0.5,14.6,-2,-14.6,14.5,-14.6" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L138,20.5"/>
        <text class="st14">
            <tspan textLength="130" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">恶意用户批量注册账号</tspan>
        </text>
    </g>
    <g transform="translate(1185,917.3)" ed:parentid="292" ed:height="20.5" ed:layout="rightmap" id="298" ed:width="34">
        <path transform="translate(-14.5,20.5)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="299" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L34,20.5"/>
        <text class="st14">
            <tspan textLength="26" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">撞库</tspan>
        </text>
    </g>
    <g transform="translate(1185,946.5)" ed:parentid="292" ed:height="20.5" ed:layout="rightmap" id="300" ed:width="112">
        <path transform="translate(-14.5,5.9)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="301" d="M-14.5,-14.6C0.5,-14.6,-2,14.6,14.5,14.6" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L112,20.5"/>
        <text class="st14">
            <tspan textLength="104" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">批量重置用户账号</tspan>
        </text>
    </g>
    <g transform="translate(1211,975.7)" ed:parentid="294" ed:height="20.5" ed:layout="rightmap" id="302" ed:width="60">
        <path transform="translate(-14.5,115.4)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="303" d="M-14.5,94.9C5.8,94.9,-14.5,-94.9,14.5,-94.9" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">恶意订单</tspan>
        </text>
    </g>
    <g transform="translate(1211,1004.9)" ed:parentid="294" ed:height="20.5" ed:layout="rightmap" id="304" ed:width="60">
        <path transform="translate(-14.5,100.8)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="305" d="M-14.5,80.3C5.8,80.3,-14.5,-80.3,14.5,-80.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">低价购买</tspan>
        </text>
    </g>
    <g transform="translate(1211,1034.1)" ed:parentid="294" ed:height="20.5" ed:layout="rightmap" id="306" ed:width="145">
        <path transform="translate(-14.5,86.2)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="307" d="M-14.5,65.7C5.8,65.7,-14.5,-65.7,14.5,-65.7" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L145,20.5"/>
        <text class="st14">
            <tspan textLength="137" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">批量刷优惠券&amp;其他奖励</tspan>
        </text>
    </g>
    <g transform="translate(1211,1063.3)" ed:parentid="294" ed:height="20.5" ed:layout="rightmap" id="308" ed:width="34">
        <path transform="translate(-14.5,71.6)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="309" d="M-14.5,51.1C5.6,51.1,-14.1,-51.1,14.5,-51.1" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L34,20.5"/>
        <text class="st14">
            <tspan textLength="26" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">抢购</tspan>
        </text>
    </g>
    <g transform="translate(1211,1092.5)" ed:parentid="294" ed:height="20.5" ed:layout="rightmap" id="310" ed:width="125">
        <path transform="translate(-14.5,57)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="311" d="M-14.5,36.5C4.4,36.5,-11.2,-36.5,14.5,-36.5" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L125,20.5"/>
        <text class="st14">
            <tspan textLength="117" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">窃取其他用户优惠券</tspan>
        </text>
    </g>
    <g transform="translate(1211,1121.7)" ed:parentid="294" ed:height="20.5" ed:layout="rightmap" id="312" ed:width="60">
        <path transform="translate(-14.5,42.4)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="313" d="M-14.5,21.9C2,21.9,-5.5,-21.9,14.5,-21.9" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">购买限制</tspan>
        </text>
    </g>
    <g transform="translate(1211,1150.9)" ed:parentid="294" ed:height="20.5" ed:layout="rightmap" id="314" ed:width="60">
        <path transform="translate(-14.5,27.8)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="315" d="M-14.5,7.3C-1.2,7.3,1.8,-7.3,14.5,-7.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">价格爬虫</tspan>
        </text>
    </g>
    <g transform="translate(1211,1180.1)" ed:parentid="294" ed:height="20.5" ed:layout="rightmap" id="316" ed:width="34">
        <path transform="translate(-14.5,13.2)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="317" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L34,20.5"/>
        <text class="st14">
            <tspan textLength="26" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">作弊</tspan>
        </text>
    </g>
    <g transform="translate(1211,1209.3)" ed:parentid="294" ed:height="20.5" ed:layout="rightmap" id="318" ed:width="60">
        <path transform="translate(-14.5,-1.4)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="319" d="M-14.5,-21.9C2,-21.9,-5.5,21.9,14.5,21.9" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">黄牛限制</tspan>
        </text>
    </g>
    <g transform="translate(1211,1238.5)" ed:parentid="294" ed:height="20.5" ed:layout="rightmap" id="320" ed:width="60">
        <path transform="translate(-14.5,-16)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="321" d="M-14.5,-36.5C4.4,-36.5,-11.2,36.5,14.5,36.5" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">垃圾信息</tspan>
        </text>
    </g>
    <g transform="translate(1211,1267.7)" ed:parentid="294" ed:height="20.5" ed:layout="rightmap" id="322" ed:width="60">
        <path transform="translate(-14.5,-30.6)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="323" d="M-14.5,-51.1C5.6,-51.1,-14.1,51.1,14.5,51.1" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">交易风控</tspan>
        </text>
    </g>
    <g transform="translate(1211,1296.9)" ed:parentid="294" ed:height="20.5" ed:layout="rightmap" id="324" ed:width="60">
        <path transform="translate(-14.5,-45.2)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="325" d="M-14.5,-65.7C5.8,-65.7,-14.5,65.7,14.5,65.7" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">信息泄露</tspan>
        </text>
    </g>
    <g transform="translate(1211,1326.1)" ed:parentid="294" ed:height="20.5" ed:layout="rightmap" id="326" ed:width="60">
        <path transform="translate(-14.5,-59.8)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="327" d="M-14.5,-80.3C5.8,-80.3,-14.5,80.3,14.5,80.3" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">黑色产业</tspan>
        </text>
    </g>
    <g transform="translate(1211,1355.3)" ed:parentid="294" ed:height="20.5" ed:layout="rightmap" id="328" ed:width="60">
        <path transform="translate(-14.5,-74.4)" stroke="#4486b1" stroke-linejoin="round" fill="none" id="329" d="M-14.5,-94.9C5.8,-94.9,-14.5,94.9,14.5,94.9" stroke-linecap="round"/>
        <path stroke="#4486b1" stroke-linejoin="round" fill="none" d="M0,20.5L60,20.5"/>
        <text class="st14">
            <tspan textLength="52" style="white-space:pre" lengthAdjust="spacing" y="15.8" x="4">虚假交易</tspan>
        </text>
    </g>
    <g transform="translate(658,732.4)" ed:topictype="mainidea" ed:height="62" ed:layout="map" id="101" ed:width="167">
        <path stroke="#4486b1" stroke-linejoin="round" fill="#eaf3fc" d="M8,0L159,0C163.4,0,167,3.6,167,8L167,54C167,58.4,163.4,62,159,62L8,62C3.6,62,0,58.4,0,54L0,8C0,3.6,3.6,0,8,0z" stroke-width="3"/>
        <text class="st15">
            <tspan textLength="114" style="white-space:pre" lengthAdjust="spacing" y="38.5" x="27">电商平台安全</tspan>
        </text>
    </g>
    <g transform="translate(826,757.4)" ed:togtopicid="101">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(451,757.4)" ed:togtopicid="106">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(1068,491.05)" ed:togtopicid="108">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(1068,1125.95)" ed:togtopicid="110">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(362,261)" ed:togtopicid="112">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(349,407)" ed:togtopicid="114">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(362,480)" ed:togtopicid="116">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(362,582.2)" ed:togtopicid="118">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(362,713.6)" ed:togtopicid="120">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(388,932.6)" ed:togtopicid="124">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(388,1180.8)" ed:togtopicid="126">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(388,1326.8)" ed:togtopicid="128">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(299,231.8)" ed:togtopicid="130">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(227,596.8)" ed:togtopicid="158">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(330,859.6)" ed:togtopicid="176">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(323,1034.8)" ed:togtopicid="184">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(299,1268.4)" ed:togtopicid="210">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(1157,315.85)" ed:togtopicid="220">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(1170,578.65)" ed:togtopicid="222">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(1157,710.05)" ed:togtopicid="226">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(1157,768.45)" ed:togtopicid="228">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(1170,812.25)" ed:togtopicid="230">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(1220,272.05)" ed:togtopicid="232">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(1220,461.85)" ed:togtopicid="236">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(1283,184.45)" ed:togtopicid="238">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(1355,286.65)" ed:togtopicid="240">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(1309,374.25)" ed:togtopicid="242">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(1259,549.45)" ed:togtopicid="266">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(1157,921.55)" ed:togtopicid="292">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(1183,1169.75)" ed:togtopicid="294">
        <use xlink:href="#minus"/>
    </g>
    <symbol id="plus">
        <path fill="url(#lg5)" d="M11,6C11,8.8,8.8,11,6,11C3.2,11,1,8.8,1,6C1,3.2,3.2,1,6,1C8.8,1,11,3.2,11,6z"/>
        <path stroke="#46a000" fill="none" d="M11,6C11,8.8,8.8,11,6,11C3.2,11,1,8.8,1,6C1,3.2,3.2,1,6,1C8.8,1,11,3.2,11,6zM3,6L9,6M6,3L6,9"/>
    </symbol>
    <symbol id="minus">
        <path fill="url(#lg5)" d="M11,6C11,8.8,8.8,11,6,11C3.2,11,1,8.8,1,6C1,3.2,3.2,1,6,1C8.8,1,11,3.2,11,6z"/>
        <path stroke="#46a000" fill="none" d="M11,6C11,8.8,8.8,11,6,11C3.2,11,1,8.8,1,6C1,3.2,3.2,1,6,1C8.8,1,11,3.2,11,6zM3,6L9,6"/>
    </symbol>
</svg>
</div>
        <div id="copyright">Created With  <a href="https://www.edrawsoft.com/" target="_blank" title="edrawsoft">MindMaster</a></div>
      </div>
    </div>
    <script>eval(atob('dmFyIG11YT13aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDsNCnZhciB1YT0obXVhLmluZGV4T2YoJ3J2OjExJykrbXVhLmluZGV4T2YoJ01TSUUnKSk+PTA7DQpOdW1iZXIucHJvdG90eXBlLnRvc3VpdHN2Zz1mdW5jdGlvbiAoKSB7DQogICAgdmFyIG51bT10aGlzLnZhbHVlT2YoKTsNCiAgICBpZihudW0lMT09PTApew0KICAgICAgICByZXR1cm4gbnVtKzAuNQ0KICAgIH1lbHNlIHJldHVybiBudW07DQp9Ow0KTnVtYmVyLnByb3RvdHlwZS5wbHVzej1mdW5jdGlvbigpIHsNCiAgICB2YXIgbnVtPXRoaXMudmFsdWVPZigpOw0KICAgIHJldHVybiBudW08MTA/JzAnK251bTpudW07DQp9Ow0KZnVuY3Rpb24gcGFyc2VEYXRlKG51bSkgew0KICAgIHZhciBkYXRlID0gbmV3IERhdGUobnVtKTsNCiAgICB2YXIgWSA9IGRhdGUuZ2V0RnVsbFllYXIoKSArICctJzsNCiAgICB2YXIgTSA9IChkYXRlLmdldE1vbnRoKCkrMSkucGx1c3ooKSArICctJzsNCiAgICB2YXIgRCA9IGRhdGUuZ2V0RGF0ZSgpLnBsdXN6KCkgKyAnICc7DQogICAgdmFyIGggPSBkYXRlLmdldEhvdXJzKCkucGx1c3ooKSArICc6JzsNCiAgICB2YXIgbW0gPSBkYXRlLmdldE1pbnV0ZXMoKS5wbHVzeigpICsgJzonOw0KICAgIHZhciBzID0gZGF0ZS5nZXRTZWNvbmRzKCkucGx1c3ooKTsNCiAgICByZXR1cm4gWStNK0QraCttbStzOw0KfQ0KLy8tLXByZWRlZmluZWQNCi8vY29tbWVudC0tDQp2YXIgY29tbWVudHM9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZz5nW2VkXFw6Y29tbWVudF0nKTsNCmZ1bmN0aW9uIGdldGN3aChwb3B1cCkgew0KICAgIGRvY3VtZW50LmJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3N2ZycpWzBdLmFwcGVuZENoaWxkKHBvcHVwKTsNCiAgICB2YXIgdz1wb3B1cC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDsNCiAgICB2YXIgaD1wb3B1cC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7DQogICAgcmV0dXJuIFt3LGhdDQp9DQpmb3IodmFyIGk9MDtpPGNvbW1lbnRzLmxlbmd0aDtpKyspew0KICAgIHZhciBwb3B1cD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywnZycpOw0KICAgIHZhciBob3Zlcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywncmVjdCcpOw0KICAgIHZhciBvbGluZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywncmVjdCcpOw0KICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnZmlsbCcsJyNjZGNkZmYnKTsNCiAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3gnLCcwJyk7DQogICAgaG92ZXIuc2V0QXR0cmlidXRlKCd5JywnMCcpOw0KICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywnMTYnKTsNCiAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywnMTYnKTsNCiAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2ZpbGwtb3BhY2l0eScsJzAuNicpOw0KICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJyxjb21tZW50c1tpXS5xdWVyeVNlbGVjdG9yKCd1c2UnKS5nZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScpKTsNCiAgICBob3Zlci5zdHlsZS5kaXNwbGF5PSdub25lJzsNCiAgICBjb21tZW50c1tpXS5hcHBlbmRDaGlsZChob3Zlcik7DQogICAgdmFyIGE9SlNPTi5wYXJzZShjb21tZW50c1tpXS5nZXRBdHRyaWJ1dGUoJ2VkOmNvbW1lbnQnKSk7DQogICAgdmFyIGhlaWdodD0wOw0KICAgIHZhciBjYXJyPVtdOw0KICAgIGZvcih2YXIgaj0wO2o8YS5sZW5ndGg7aisrKXsNCiAgICAgICAgdmFyIHN0YW1wPU51bWJlcihhW2pdLkRhdGUpKjEwMDA7DQogICAgICAgIHZhciB0aW1lPXBhcnNlRGF0ZShzdGFtcCk7DQogICAgICAgIHZhciBuYW1lPWFbal0uTmFtZTsNCiAgICAgICAgdmFyIG1lc3NhZ2U9YVtqXS5NZXNzYWdlOw0KICAgICAgICB2YXIgbWVzc2FnZUFycj1tZXNzYWdlLnNwbGl0KC9cbi8pOw0KICAgICAgICB2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywnZycpOw0KICAgICAgICB2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywndGV4dCcpOw0KICAgICAgICB2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywndGV4dCcpOw0KICAgICAgICB2YXIgbT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywndGV4dCcpOw0KICAgICAgICBuLnNldEF0dHJpYnV0ZSgneCcsNSk7DQogICAgICAgIG4uc2V0QXR0cmlidXRlKCd5JywxMik7DQogICAgICAgIG4uc2V0QXR0cmlidXRlKCdmaWxsJywnIzAwNmVmZicpOw0KICAgICAgICBuLnRleHRDb250ZW50PW5hbWUrJ++8mic7DQogICAgICAgIG4uc2V0QXR0cmlidXRlKCdmb250LXNpemUnLCcxMicpOw0KICAgICAgICB0LnNldEF0dHJpYnV0ZSgneCcsMjAwKTsNCiAgICAgICAgdC5zZXRBdHRyaWJ1dGUoJ3knLDEyKTsNCiAgICAgICAgdC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCcjOTY5Njk2Jyk7DQogICAgICAgIHQudGV4dENvbnRlbnQ9dGltZTsNCiAgICAgICAgdC5zZXRBdHRyaWJ1dGUoJ2ZvbnQtc2l6ZScsJzEwJyk7DQogICAgICAgIG0uc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCd0cmFuc2xhdGUoMjAsMjcpJyk7DQogICAgICAgIG0uc2V0QXR0cmlidXRlKCdmb250LXNpemUnLCcxMicpOw0KICAgICAgICBmb3IodmFyIGs9MDtrPG1lc3NhZ2VBcnIubGVuZ3RoO2srKyl7DQogICAgICAgICAgICB2YXIgdHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsJ3RzcGFuJyk7DQogICAgICAgICAgICB0cy5zZXRBdHRyaWJ1dGUoJ3gnLCcwJyk7DQogICAgICAgICAgICB0cy5zZXRBdHRyaWJ1dGUoJ3knLGsqMTYpOw0KICAgICAgICAgICAgdHMudGV4dENvbnRlbnQ9bWVzc2FnZUFycltrXTsNCiAgICAgICAgICAgIG0uYXBwZW5kQ2hpbGQodHMpOw0KICAgICAgICB9DQogICAgICAgIG8uc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCd0cmFuc2xhdGUoMCwnK2hlaWdodCsnKScpOw0KICAgICAgICBvLmFwcGVuZENoaWxkKG4pOw0KICAgICAgICBvLmFwcGVuZENoaWxkKHQpOw0KICAgICAgICBvLmFwcGVuZENoaWxkKG0pOw0KICAgICAgICBjYXJyLnB1c2gobyk7DQogICAgICAgIHBvcHVwLmFwcGVuZENoaWxkKG8pOw0KICAgICAgICBoZWlnaHQ9KG1lc3NhZ2VBcnIubGVuZ3RoKzEpKjE2K2hlaWdodDsNCiAgICB9DQogICAgdmFyIHdhcnI9Z2V0Y3doKHBvcHVwKTsNCiAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ3gnLCcwJyk7DQogICAgb2xpbmUuc2V0QXR0cmlidXRlKCd5JywnMCcpOw0KICAgIHZhciBvdz13YXJyWzBdKzEwLjU7DQogICAgdmFyIG9oPXdhcnJbMV0rMzsNCiAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ3dpZHRoJyxvdyk7DQogICAgb2xpbmUuc2V0QXR0cmlidXRlKCdoZWlnaHQnLG9oKTsNCiAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCd3aGl0ZScpOw0KICAgIG9saW5lLnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywnIzY1NjU2NScpOw0KICAgIHBvcHVwLmFwcGVuZENoaWxkKG9saW5lKTsNCiAgICB2YXIgbD1jYXJyLmxlbmd0aDsNCiAgICB3aGlsZShsLS0pew0KICAgICAgICBwb3B1cC5hcHBlbmRDaGlsZChjYXJyW2xdKTsNCiAgICB9DQogICAgcG9wdXAub25tb3VzZW92ZXI9ZnVuY3Rpb24gKCkgew0KICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzsNCiAgICB9Ow0KICAgIHBvcHVwLm9ubW91c2VvdXQ9ZnVuY3Rpb24gKCkgew0KICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgfTsNCiAgICB2YXIgY3M9Y29tbWVudHNbaV0ucXVlcnlTZWxlY3RvcigndXNlJykuZ2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nKS5tYXRjaCgvXCgoXFMqfFxTKlxzXFMqKVwpLylbMV0uc3BsaXQoLyB8LC8pOw0KICAgIHZhciBwcz1jb21tZW50c1tpXS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZSgndHJhbnNmb3JtJykubWF0Y2goL1woKFxTKnxcUypcc1xTKilcKS8pWzFdLnNwbGl0KC8gfCwvKTsNCiAgICB2YXIgeD1wYXJzZUZsb2F0KGNzWzBdKStwYXJzZUZsb2F0KHBzWzBdKTsNCiAgICB2YXIgeT1wYXJzZUZsb2F0KHBzWzFdKTsNCiAgICB4PXgudG9zdWl0c3ZnKCk7DQogICAgeT15LnRvc3VpdHN2ZygpOw0KICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJywndHJhbnNsYXRlKCcreCsnLCcreSsnKScpOw0KICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgnY29tbWVudCcsJycpOw0KICAgIHBvcHVwLnN0eWxlLmRpc3BsYXk9J25vbmUnOw0KICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgnZWQ6Y29tbWVudGlkJyxjb21tZW50c1tpXS5wYXJlbnROb2RlLmlkKTsNCiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc3ZnLWNvbnRhaW5lciA+IHN2ZycpLmFwcGVuZENoaWxkKHBvcHVwKTsNCiAgICBjb21tZW50c1tpXS5vbm1vdXNlb3Zlcj1mdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBjb21tZW50aWQ9dGhpcy5wYXJlbnROb2RlLmlkOw0KICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5kaXNwbGF5PSdibG9jayc7DQogICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDpjb21tZW50aWQ9JyIrY29tbWVudGlkKyInXVtjb21tZW50XSIpLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzsNCiAgICB9Ow0KICAgIGNvbW1lbnRzW2ldLm9ubW91c2VvdXQ9ZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgY29tbWVudGlkPXRoaXMucGFyZW50Tm9kZS5pZDsNCi8vICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7DQogICAgICAgIHRoaXMucXVlcnlTZWxlY3RvcigncmVjdCcpLnN0eWxlLmRpc3BsYXk9J25vbmUnOw0KICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6Y29tbWVudGlkPSciK2NvbW1lbnRpZCsiJ11bY29tbWVudF0iKS5zdHlsZS5kaXNwbGF5PSdub25lJzsNCiAgICB9DQp9DQovLy0tY29tbWVudA0KLy9ub3RlLS0NCmlmKCF1YSl7DQogICAgdmFyIG5vdGVzPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2c+Z1tlZFxcOm5vdGVdJyk7DQogICAgZnVuY3Rpb24gZ2V0d2gocyxwKSB7DQogICAgICAgIHZhciBtYWlucD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsNCiAgICAgICAgbWFpbnAuc3R5bGUuY3NzVGV4dD1zOw0KICAgICAgICBtYWlucC5zdHlsZS5kaXNwbGF5PSdpbmxpbmUtYmxvY2snOw0KICAgICAgICBtYWlucC5pbm5lckhUTUw9cDsNCiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtYWlucCk7DQogICAgICAgIHZhciB3PW1haW5wLmNsaWVudFdpZHRoOw0KICAgICAgICB2YXIgaD1tYWlucC5jbGllbnRIZWlnaHQ7DQogICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobWFpbnApOw0KICAgICAgICByZXR1cm4gW3csaF0NCiAgICB9DQogICAgZm9yKHZhciBpPTA7aTxub3Rlcy5sZW5ndGg7aSsrKXsNCiAgICAgICAgdmFyIGE9bm90ZXNbaV0uZ2V0QXR0cmlidXRlKCdlZDpub3RlJyk7DQogICAgICAgIHZhciBtYWlucD1hLm1hdGNoKC88cChbXFNcc10qKTxcL3A+L2cpWzBdOw0KICAgICAgICB2YXIgbWFpbnM9YS5tYXRjaCgvc3R5bGU9IiguKj8pIi8pWzFdOw0KICAgICAgICB2YXIgb3V0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCdnJyk7DQogICAgICAgIHZhciBvbGluZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywncmVjdCcpOw0KICAgICAgICB2YXIgcG9wdXA9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsJ2ZvcmVpZ25PYmplY3QnKTsNCiAgICAgICAgdmFyIGhvdmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCdyZWN0Jyk7DQogICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnZmlsbCcsJyNjZGNkZmYnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd4JywnMCcpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3knLCcwJyk7DQogICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywnMTYnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd3aWR0aCcsJzE2Jyk7DQogICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnZmlsbC1vcGFjaXR5JywnMC42Jyk7DQogICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJyxub3Rlc1tpXS5xdWVyeVNlbGVjdG9yKCd1c2UnKS5nZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScpKTsNCiAgICAgICAgaG92ZXIuc3R5bGUuZGlzcGxheT0nbm9uZSc7DQogICAgICAgIG5vdGVzW2ldLmFwcGVuZENoaWxkKGhvdmVyKTsNCiAgICAgICAgcG9wdXAuc3R5bGUuY3NzVGV4dD1tYWluczsNCiAgICAgICAgcG9wdXAuaW5uZXJIVE1MPW1haW5wOw0KICAgICAgICB2YXIgd2g9Z2V0d2gobWFpbnMsbWFpbnApOw0KICAgICAgICBwb3B1cC5zZXRBdHRyaWJ1dGUoJ3dpZHRoJyx3aFswXSsxNik7DQogICAgICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgnaGVpZ2h0Jyx3aFsxXSs4KTsNCiAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCd0cmFuc2xhdGUoOCw0KScpOw0KICAgICAgICBwb3B1cC5zdHlsZS50ZXh0QWxpZ249J2xlZnQnOw0KICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ3gnLCcwJyk7DQogICAgICAgIG9saW5lLnNldEF0dHJpYnV0ZSgneScsJzAnKTsNCiAgICAgICAgb2xpbmUuc2V0QXR0cmlidXRlKCd3aWR0aCcsd2hbMF0rMTYpOw0KICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsd2hbMV0rOCk7DQogICAgICAgIG9saW5lLnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywnI2EyN2EwMCcpOw0KICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCcjZmZlNzlkJyk7DQogICAgICAgIG91dC5hcHBlbmRDaGlsZChvbGluZSk7DQogICAgICAgIG91dC5hcHBlbmRDaGlsZChwb3B1cCk7DQogICAgICAgIG91dC5zZXRBdHRyaWJ1dGUoJ25vdGUnLCcnKTsNCiAgICAgICAgb3V0LnN0eWxlLmRpc3BsYXk9J25vbmUnOw0KICAgICAgICBvdXQuc2V0QXR0cmlidXRlKCdlZDpub3RlaWQnLG5vdGVzW2ldLnBhcmVudE5vZGUuaWQpOw0KICAgICAgICBvdXQub25tb3VzZW92ZXI9ZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5PSdibG9jayc7DQogICAgICAgIH07DQogICAgICAgIG91dC5vbm1vdXNlb3V0PWZ1bmN0aW9uICgpIHsNCi8vICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uID8gd2luZG93LmdldFNlbGVjdGlvbigpLnJlbW92ZVJhbmdlKHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZSk6ZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KCk7DQoNCiAgICAgICAgICAgIHRoaXMuc3R5bGUuZGlzcGxheT0nbm9uZSc7DQogICAgICAgIH07DQogICAgICAgIHZhciBjcz1ub3Rlc1tpXS5xdWVyeVNlbGVjdG9yKCd1c2UnKS5nZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScpLm1hdGNoKC9cKChcUyp8XFMqXHNcUyopXCkvKVsxXS5zcGxpdCgvIHwsLyk7DQogICAgICAgIHZhciBwcz1ub3Rlc1tpXS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZSgndHJhbnNmb3JtJykubWF0Y2goL1woKFxTKnxcUypcc1xTKilcKS8pWzFdLnNwbGl0KC8gfCwvKTsNCiAgICAgICAgdmFyIHg9cGFyc2VGbG9hdChjc1swXSkrcGFyc2VGbG9hdChwc1swXSk7DQogICAgICAgIHZhciB5PXBhcnNlRmxvYXQocHNbMV0pOw0KICAgICAgICB4PXgudG9zdWl0c3ZnKCk7DQogICAgICAgIHk9eS50b3N1aXRzdmcoKTsNCiAgICAgICAgb3V0LnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJywndHJhbnNsYXRlKCcreCsnLCcreSsnKScpOw0KICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc3ZnLWNvbnRhaW5lciA+IHN2ZycpLmFwcGVuZENoaWxkKG91dCk7DQogICAgICAgIG5vdGVzW2ldLm9ubW91c2VvdmVyPWZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBub3RlaWQ9dGhpcy5wYXJlbnROb2RlLmlkOw0KICAgICAgICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yKCdyZWN0Jykuc3R5bGUuZGlzcGxheT0nYmxvY2snOw0KICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOm5vdGVpZD0nIitub3RlaWQrIiddW25vdGVdIikuc3R5bGUuZGlzcGxheT0nYmxvY2snOw0KICAgICAgICB9Ow0KICAgICAgICBub3Rlc1tpXS5vbm1vdXNlb3V0PWZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBub3RlaWQ9dGhpcy5wYXJlbnROb2RlLmlkOw0KLy8gICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKTsNCiAgICAgICAgICAgIHRoaXMucXVlcnlTZWxlY3RvcigncmVjdCcpLnN0eWxlLmRpc3BsYXk9J25vbmUnOw0KICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOm5vdGVpZD0nIitub3RlaWQrIiddW25vdGVdIikuc3R5bGUuZGlzcGxheT0nbm9uZSc7DQogICAgICAgIH0NCiAgICB9DQp9ZWxzZXsNCiAgICBjb25zb2xlLmxvZygn5oqx5q2J77yMSUXmtY/op4jlmajkuI3mlK/mjIFub3Rl6Kej5p6Q77yM6K+35L2/55So5YW25LuW5YaF5qC45rWP6KeI5Zmo44CC6LCi6LCi77yBJykNCn0NCi8vLS1ub3RlDQovL2h5cGVybGluay0tDQp2YXIgbGlua3M9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZz5nW2VkXFw6aHlwZXJsaW5rXScpOw0KZnVuY3Rpb24gZ2V0bWF4bGVuKGFycixicnIpIHsNCiAgICB2YXIgbD0wOw0KICAgIHZhciBsbD0wOw0KICAgIGZvcih2YXIgaj0wO2o8YXJyLmxlbmd0aDtqKyspew0KICAgICAgICB2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywndGV4dCcpOw0KICAgICAgICBpZighaXNOYU4obGlua2FycltqXSkpew0KICAgICAgICAgICAgZS50ZXh0Q29udGVudD0nUGFnZS0nK2FycltqXTsNCiAgICAgICAgfWVsc2V7DQogICAgICAgICAgICBlLnRleHRDb250ZW50PWFycltqXTsNCiAgICAgICAgfQ0KICAgICAgICBlLnN0eWxlLmZvbnRTaXplPScxMnB4JzsNCiAgICAgICAgZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3ZnJylbMF0uYXBwZW5kQ2hpbGQoZSk7DQogICAgICAgIHZhciBldz1lLmdldEJCb3goKS53aWR0aDsNCiAgICAgICAgZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3ZnJylbMF0ucmVtb3ZlQ2hpbGQoZSk7DQogICAgICAgIHZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCd0ZXh0Jyk7DQogICAgICAgIGgudGV4dENvbnRlbnQ9YnJyW2pdOw0KICAgICAgICBoLnN0eWxlLmZvbnRTaXplPScxMnB4JzsNCiAgICAgICAgaC5zdHlsZS5mb250V2VpZ2h0PSdib2xkJzsNCiAgICAgICAgZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3ZnJylbMF0uYXBwZW5kQ2hpbGQoaCk7DQogICAgICAgIHZhciBodz1oLmdldEJCb3goKS53aWR0aDsNCiAgICAgICAgZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3ZnJylbMF0ucmVtb3ZlQ2hpbGQoaCk7DQogICAgICAgIGw9ZXc+aHc/ZXc6aHc7DQogICAgICAgIGxsPWw+bGw/bDpsbDsNCiAgICB9DQogICAgcmV0dXJuIGxsOw0KfQ0KZm9yKHZhciBpPTA7aTxsaW5rcy5sZW5ndGg7aSsrKXsNCiAgICB2YXIgcG9wdXA9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsJ2cnKTsNCiAgICB2YXIgaG92ZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsJ3JlY3QnKTsNCiAgICB2YXIgZGVzY2Fycj1bXTsNCiAgICB2YXIgbGlua2Fycj1bXTsNCiAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCcjY2RjZGZmJyk7DQogICAgaG92ZXIuc2V0QXR0cmlidXRlKCd4JywnMCcpOw0KICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgneScsJzAnKTsNCiAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsJzE2Jyk7DQogICAgaG92ZXIuc2V0QXR0cmlidXRlKCd3aWR0aCcsJzE2Jyk7DQogICAgaG92ZXIuc2V0QXR0cmlidXRlKCdmaWxsLW9wYWNpdHknLCcwLjYnKTsNCiAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScsbGlua3NbaV0ucXVlcnlTZWxlY3RvcigndXNlJykuZ2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nKSk7DQogICAgaG92ZXIuc3R5bGUuZGlzcGxheT0nbm9uZSc7DQogICAgbGlua3NbaV0uYXBwZW5kQ2hpbGQoaG92ZXIpOw0KICAgIC8vIGNvbnNvbGUubG9nKGxpbmtzW2ldLmdldEF0dHJpYnV0ZSgnZWQ6aHlwZXJsaW5rJykpOw0KICAgIHZhciBhPUpTT04ucGFyc2UobGlua3NbaV0uZ2V0QXR0cmlidXRlKCdlZDpoeXBlcmxpbmsnKSk7DQogICAgdmFyIGNzPWxpbmtzW2ldLnF1ZXJ5U2VsZWN0b3IoJ3VzZScpLmdldEF0dHJpYnV0ZSgndHJhbnNmb3JtJykubWF0Y2goL1woKFxTKnxcUypcc1xTKilcKS8pWzFdLnNwbGl0KC8gfCwvKTsNCiAgICB2YXIgcHM9bGlua3NbaV0ucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScpLm1hdGNoKC9cKChcUyp8XFMqXHNcUyopXCkvKVsxXS5zcGxpdCgvIHwsLyk7DQogICAgdmFyIHg9cGFyc2VGbG9hdChjc1swXSkrcGFyc2VGbG9hdChwc1swXSk7DQogICAgdmFyIHk9cGFyc2VGbG9hdChwc1sxXSk7DQogICAgeD14LnRvc3VpdHN2ZygpOw0KICAgIHk9eS50b3N1aXRzdmcoKTsNCiAgICB2YXIgYWw9YS5sZW5ndGg7DQogICAgZm9yKHZhciBqPTA7ajxhbDtqKyspew0KICAgICAgICBsaW5rYXJyLnB1c2goYVtqXS5saW5rKTsNCiAgICAgICAgZGVzY2Fyci5wdXNoKGFbal0uZGVzYyk7DQogICAgfQ0KICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJywndHJhbnNsYXRlKCcreCsnLCcreSsnKScpOw0KICAgIHZhciBtYXg9Z2V0bWF4bGVuKGxpbmthcnIsZGVzY2Fycik7DQogICAgZm9yKHZhciBrPTA7azxhbDtrKyspew0KICAgICAgICB2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywnYScpOw0KICAgICAgICB2YXIgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywncmVjdCcpOw0KICAgICAgICB2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywndGV4dCcpOw0KICAgICAgICB2YXIgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywndGV4dCcpOw0KICAgICAgICBpZihpc05hTihsaW5rYXJyW2tdKSl7DQogICAgICAgICAgICBjLnNldEF0dHJpYnV0ZSgnaHJlZicsbGlua2FycltrXSk7DQogICAgICAgICAgICBjLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywnX2JsYW5rJyk7DQogICAgICAgICAgICBlLnRleHRDb250ZW50PWxpbmthcnJba107DQogICAgICAgIH1lbHNlew0KICAgICAgICAgICAgZS50ZXh0Q29udGVudD0nUGFnZS0nK2xpbmthcnJba107DQogICAgICAgICAgICBjLnNldEF0dHJpYnV0ZSgnaHJlZicsJyMnK2xpbmthcnJba10pOw0KICAgICAgICB9DQogICAgICAgIGQuc2V0QXR0cmlidXRlKCd3aWR0aCcsbWF4KzEwKTsNCiAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsJzMzJyk7DQogICAgICAgIGQuc2V0QXR0cmlidXRlKCdzdHJva2UnLCcjOTk5OTk5Jyk7DQogICAgICAgIGQuc2V0QXR0cmlidXRlKCdmaWxsJywnd2hpdGUnKTsNCiAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ3knLDMzKmspOw0KICAgICAgICBmLnRleHRDb250ZW50PWRlc2NhcnJba107DQogICAgICAgIGYuc3R5bGUuZm9udFNpemU9JzEycHgnOw0KICAgICAgICBmLnN0eWxlLmZvbnRXZWlnaHQ9J2JvbGQnOw0KICAgICAgICBmLnNldEF0dHJpYnV0ZSgneCcsNSk7DQogICAgICAgIGYuc2V0QXR0cmlidXRlKCd5JywzMyprKzEyKTsNCiAgICAgICAgZS5zdHlsZS5mb250U2l6ZT0nMTJweCc7DQogICAgICAgIGUuc2V0QXR0cmlidXRlKCd5JywzMyprKzI4KTsNCiAgICAgICAgZS5zZXRBdHRyaWJ1dGUoJ3gnLDUpOw0KICAgICAgICBjLmFwcGVuZENoaWxkKGQpOw0KICAgICAgICBjLmFwcGVuZENoaWxkKGYpOw0KICAgICAgICBjLmFwcGVuZENoaWxkKGUpOw0KICAgICAgICBjLm9ubW91c2VvdmVyPWZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHRoaXMucXVlcnlTZWxlY3RvcigncmVjdCcpLnN0eWxlLmZpbGw9JyNlMWUxZmYnDQogICAgICAgIH07DQogICAgICAgIGMub25tb3VzZW91dD1mdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5maWxsPSd3aGl0ZScNCiAgICAgICAgfTsNCiAgICAgICAgcG9wdXAuYXBwZW5kQ2hpbGQoYyk7DQogICAgfQ0KICAgIHBvcHVwLnN0eWxlLmRpc3BsYXk9J25vbmUnOw0KICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgnaHlwZXJsaW5rJywnJyk7DQogICAgcG9wdXAuc2V0QXR0cmlidXRlKCdlZDpsaW5raWQnLGxpbmtzW2ldLnBhcmVudE5vZGUuaWQpOw0KICAgIHBvcHVwLm9ubW91c2VvdmVyPWZ1bmN0aW9uICgpIHsNCiAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5PSdibG9jayc7DQogICAgfTsNCiAgICBwb3B1cC5vbmNsaWNrPWZ1bmN0aW9uICgpIHsNCiAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5PSdub25lJzsNCiAgICB9Ow0KICAgIHBvcHVwLm9ubW91c2VvdXQ9ZnVuY3Rpb24gKCkgew0KICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXk9J25vbmUnOw0KICAgIH07DQogICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3N2Zy1jb250YWluZXIgPiBzdmcnKS5hcHBlbmRDaGlsZChwb3B1cCk7DQogICAgbGlua3NbaV0ub25tb3VzZW92ZXI9ZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgbGlua2lkPXRoaXMucGFyZW50Tm9kZS5pZDsNCiAgICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yKCdyZWN0Jykuc3R5bGUuZGlzcGxheT0nYmxvY2snOw0KICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6bGlua2lkPSciK2xpbmtpZCsiJ11baHlwZXJsaW5rXSIpLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzsNCiAgICB9DQogICAgbGlua3NbaV0ub25tb3VzZW91dD1mdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBsaW5raWQ9dGhpcy5wYXJlbnROb2RlLmlkOw0KICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5kaXNwbGF5PSdub25lJzsNCiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOmxpbmtpZD0nIitsaW5raWQrIiddW2h5cGVybGlua10iKS5zdHlsZS5kaXNwbGF5PSdub25lJzsNCiAgICB9DQp9DQovLy0taHlwZXJsaW5rDQovL2luaXRpYWxpemUtLQ0KdmFyIHNoYXBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2dbZWRcXDp0b2d0b3BpY2lkXScpOw0KdmFyIG1JZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdnW2VkXFw6dG9waWN0eXBlXScpOw0KdmFyIGRhdGFUcmVlPXt9Ow0KdmFyIGV4dHJhUmVsYT17fTsNCnZhciBjaGVja0lEPScnOw0KZm9yKHZhciBpPTA7aTxtSWQubGVuZ3RoO2krKyl7DQogICAgdmFyIHR5cGU9bUlkW2ldLmdldEF0dHJpYnV0ZSgnZWQ6dG9waWN0eXBlJyk7DQogICAgdmFyIHNpZD1tSWRbaV0uaWQ7DQogICAgaWYodHlwZSE9PSdjYWxsb3V0Jyl7DQogICAgICAgIGluaXQoc2lkLGRhdGFUcmVlKQ0KICAgIH0NCn0NCmZ1bmN0aW9uIGluaXQoaWQsIG9iaikgew0KICAgIHZhciBjaGlsZHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJnW2VkXFw6cGFyZW50aWQ9JyIgKyBpZCArICInXTpub3QoW2VkXFw6dG9waWN0eXBlXSkiKTsNCiAgICB2YXIgY2FsbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJnW2VkXFw6cGFyZW50aWQ9JyIgKyBpZCArICInXVtlZFxcOnRvcGljdHlwZV0iKTsNCiAgICB2YXIgc3VtbWFyeSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInBhdGhbZWRcXDpwYXJlbnRpZCo9JyIgKyBpZCArICInXVtlZFxcOnR5cGU9J3N1bW1hcnknXSIpOw0KICAgIHZhciBib3VuZGFyeT0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgicGF0aFtlZFxcOnBhcmVudGlkKj0nIiArIGlkICsgIiddW2VkXFw6dHlwZT0nYm91bmRhcnknXSIpOw0KICAgIHZhciByZWxhZnJvbT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJnW2VkXFw6ZnJvbWlkKj0nIiArIGlkICsgIiddW2VkXFw6dHlwZT0ncmVsYXRpb24nXSIpOw0KICAgIHZhciByZWxhdG89ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiZ1tlZFxcOnRvaWQqPSciICsgaWQgKyAiJ11bZWRcXDp0eXBlPSdyZWxhdGlvbiddIik7DQogICAgb2JqWyJtIiArIGlkXSA9IHt9Ow0KICAgIHZhciB0eXBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmdldEF0dHJpYnV0ZSgnZWQ6dG9waWN0eXBlJyk7DQogICAgdmFyIGl3PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5nZXRBdHRyaWJ1dGUoJ2VkOndpZHRoJyk7DQogICAgdmFyIGloPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5nZXRBdHRyaWJ1dGUoJ2VkOmhlaWdodCcpOw0KICAgIGlmICh0eXBlKSB7DQogICAgICAgIG9ialsibSIgKyBpZF0udHlwZSA9IHR5cGU7DQogICAgfQ0KICAgIGlmKGl3JiZpaCl7DQogICAgICAgIG9ialsibSIgKyBpZF0ud2lkdGggPWl3Ow0KICAgICAgICBvYmpbIm0iICsgaWRdLmhlaWdodCA9aWg7DQogICAgfQ0KICAgIGlmIChyZWxhZnJvbS5sZW5ndGggIT09IDApIHsNCiAgICAgICAgb2JqWyJtIiArIGlkXS5yZWxhZnJvbSA9IHt9Ow0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlbGFmcm9tLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICB2YXIgaW5kZXhpZCA9IHJlbGFmcm9tW2ldLmlkOw0KICAgICAgICAgICAgdmFyIHRvaWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpbmRleGlkKS5nZXRBdHRyaWJ1dGUoJ2VkOnRvaWQnKTsNCiAgICAgICAgICAgIGlmIChleHRyYVJlbGFbaW5kZXhpZF0gPT09IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgICAgIGV4dHJhUmVsYVtpbmRleGlkXSA9IHsNCiAgICAgICAgICAgICAgICAgICAgaWQ6IGluZGV4aWQsDQogICAgICAgICAgICAgICAgICAgIGZyb21pZDogaWQsDQogICAgICAgICAgICAgICAgICAgIHRvaWQ6IHRvaWQsDQogICAgICAgICAgICAgICAgICAgIGlzQzogZmFsc2UNCiAgICAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgb2JqWyJtIiArIGlkXS5yZWxhZnJvbVtpbmRleGlkXT17fTsNCiAgICAgICAgICAgIG9ialsibSIgKyBpZF0ucmVsYWZyb20uZGlzcGxheT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnPydibG9jayc6J25vbmUnOw0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChyZWxhdG8ubGVuZ3RoICE9PSAwKSB7DQogICAgICAgIG9ialsibSIgKyBpZF0ucmVsYXRvID0ge307DQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVsYXRvLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICB2YXIgaW5kZXhpZD1yZWxhdG9baV0uaWQ7DQogICAgICAgICAgICB2YXIgZnJvbWlkPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGluZGV4aWQpLmdldEF0dHJpYnV0ZSgnZWQ6ZnJvbWlkJyk7DQogICAgICAgICAgICBpZihleHRyYVJlbGFbaW5kZXhpZF0gPT09IHVuZGVmaW5lZCl7DQogICAgICAgICAgICAgICAgZXh0cmFSZWxhW2luZGV4aWRdPXsNCiAgICAgICAgICAgICAgICAgICAgaWQ6aW5kZXhpZCwNCiAgICAgICAgICAgICAgICAgICAgZnJvbWlkOmZyb21pZCwNCiAgICAgICAgICAgICAgICAgICAgdG9pZDppZCwNCiAgICAgICAgICAgICAgICAgICAgaXNDOmZhbHNlDQogICAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIG9ialsibSIgKyBpZF0ucmVsYXRvW2luZGV4aWRdPXt9Ow0KICAgICAgICAgICAgb2JqWyJtIiArIGlkXS5yZWxhdG8uZGlzcGxheT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnPydibG9jayc6J25vbmUnOw0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChjaGlsZHMubGVuZ3RoICE9PSAwKSB7DQogICAgICAgIG9ialsibSIgKyBpZF0uY2hpbGQgPSB7fTsNCiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDp0b2d0b3BpY2lkPSciICsgaWQgKyAiJ10iKSkgew0KICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOnRvZ3RvcGljaWQ9JyIgKyBpZCArICInXSIpLmNoaWxkTm9kZXNbMF0uZ2V0QXR0cmlidXRlKCd4bGluazpocmVmJykpOw0KICAgICAgICAgICAgdmFyIHRvZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDp0b2d0b3BpY2lkPSciICsgaWQgKyAiJ10iKS5jaGlsZHJlblswXS5nZXRBdHRyaWJ1dGUoJ3hsaW5rOmhyZWYnKS5zbGljZSgxKTsNCiAgICAgICAgICAgIG9ialsibSIgKyBpZF0udG9ndHlwZSA9IHRvZzsNCiAgICAgICAgfQ0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgdmFyIGNpZCA9IGNoaWxkc1tpXS5pZDsNCiAgICAgICAgICAgIGluaXQoY2lkLCBvYmpbIm0iICsgaWRdLmNoaWxkKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZiAoY2FsbHMubGVuZ3RoICE9PSAwKSB7DQogICAgICAgIG9ialsibSIgKyBpZF0uY2FsbCA9IHt9Ow0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbGxzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICB2YXIgY2lkID0gY2FsbHNbaV0uaWQ7DQogICAgICAgICAgICBpbml0KGNpZCwgb2JqWyJtIiArIGlkXS5jYWxsKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZiAoYm91bmRhcnkubGVuZ3RoICE9PSAwKSB7DQogICAgICAgIG9ialsibSIgKyBpZF0uYm91bmRhcnkgPSB7fTsNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3VuZGFyeS5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgdmFyIGNpZCA9Ym91bmRhcnlbaV0uaWQ7DQogICAgICAgICAgICBpbml0KGNpZCwgb2JqWyJtIiArIGlkXS5ib3VuZGFyeSk7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKHN1bW1hcnkubGVuZ3RoICE9PSAwKSB7DQogICAgICAgIG9ialsibSIgKyBpZF0uc3VtbWFyeSA9IHt9Ow0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN1bW1hcnkubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBjaWQgPSBzdW1tYXJ5W2ldLmlkOw0KICAgICAgICAgICAgaW5pdChjaWQsIG9ialsibSIgKyBpZF0uc3VtbWFyeSk7DQogICAgICAgIH0NCiAgICB9DQp9DQovLy0taW5pdGlhbGl6ZQ0KLy90b2dnbGVkaXNwbGF5LS0NCnZhciBjaGFpbkFycj1bXTsNCmZ1bmN0aW9uIGdldGNoYWluKGlkKXsNCiAgICBjaGFpbkFyci51bnNoaWZ0KCdtJytpZCk7DQogICAgdmFyIHBhcmVudD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuZ2V0QXR0cmlidXRlKCdlZDpwYXJlbnRpZCcpOw0KICAgIGlmKCFwYXJlbnQpew0KICAgICAgICByZXR1cm47DQogICAgfQ0KICAgIGdldGNoYWluKHBhcmVudCk7DQp9DQpmdW5jdGlvbiBnZXRvYmooaWQpIHsNCiAgICBjaGFpbkFycj1bXTsNCiAgICBnZXRjaGFpbihpZCk7DQogICAgdmFyIG1haW49Y2hhaW5BcnJbMF07DQogICAgaWYoY2hhaW5BcnIubGVuZ3RoPjEpew0KICAgICAgICB2YXIgb2JqPWRhdGFUcmVlW21haW5dOw0KICAgICAgICAvLyBjb25zb2xlLmxvZyhjaGFpbkFycik7DQogICAgICAgIGZvcih2YXIgaT0xO2k8Y2hhaW5BcnIubGVuZ3RoO2krKykgew0KICAgICAgICAgICAgdmFyIGEgPSBjaGFpbkFycltpXTsNCiAgICAgICAgICAgIGZvcih2YXIgaj0wO2o8T2JqZWN0LmtleXMob2JqKS5sZW5ndGg7aisrKXsNCiAgICAgICAgICAgICAgICB2YXIgY29iaj0gb2JqW09iamVjdC5rZXlzKG9iailbal1dW2FdOw0KICAgICAgICAgICAgICAgIGlmKGNvYmopew0KICAgICAgICAgICAgICAgICAgICBvYmo9Y29iajsNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIG9iag0KICAgIH1lbHNlew0KICAgICAgICB2YXIgb2JqPWRhdGFUcmVlW21haW5dOw0KICAgICAgICByZXR1cm4gb2JqDQogICAgfQ0KDQp9DQpmb3IodmFyIGk9MDtpPHNoYXBlLmxlbmd0aDtpKyspew0KICAgIHNoYXBlW2ldLm9uY2xpY2s9ZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgaWQ9TnVtYmVyKHRoaXMuZ2V0QXR0cmlidXRlKCdlZDp0b2d0b3BpY2lkJykpOw0KICAgICAgICB2YXIgb2JqPWdldG9iaihpZCk7DQoNCiAgICAgICAgdmFyIHR5cGU9b2JqLnRvZ3R5cGU9PT0nbWludXMnPydwbHVzJzonbWludXMnOw0KICAgICAgICB2YXIgZGlzcGxheT1vYmoudG9ndHlwZT09PSdtaW51cyc/J25vbmUnOidibG9jayc7DQogICAgICAgIHRoaXMuY2hpbGRyZW5bMF0uc2V0QXR0cmlidXRlKCd4bGluazpocmVmJywnIycrdHlwZSk7DQogICAgICAgIG9iai50b2d0eXBlPXR5cGU7DQogICAgICAgIGNoZWNrSUQ9b2JqOw0KDQogICAgICAgIHV0ZChvYmosaWQsZGlzcGxheSk7DQogICAgICAgIGV4dHJhUmVsYUZpbigpOw0KICAgIH0NCn0NCmZ1bmN0aW9uIHV0ZChvYmosaWQsc2hvdyxvYykgew0KDQogICAgdmFyIHBzaG93PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS5kaXNwbGF5IT09ICdub25lJz8nYmxvY2snOidub25lJzsNCiAgICBpZiAob2JqLnJlbGFmcm9tKXsNCiAgICAgICAgaWYob2JqLnJlbGFmcm9tLmRpc3BsYXkhPT0gcHNob3cpew0KICAgICAgICAgICAgdmFyIHJlbGFmcm9tcz1PYmplY3Qua2V5cyhvYmoucmVsYWZyb20pOw0KICAgICAgICAgICAgcmVsYWZyb21zLnNwbGljZShyZWxhZnJvbXMuaW5kZXhPZignZGlzcGxheScpLDEpOw0KICAgICAgICAgICAgZm9yKHZhciBrPTA7azxyZWxhZnJvbXMubGVuZ3RoO2srKyl7DQogICAgICAgICAgICAgICAgdmFyIGQ9cmVsYWZyb21zW2tdOw0KICAgICAgICAgICAgICAgIGV4dHJhUmVsYVtkXS5pc0M9dHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIG9iai5yZWxhZnJvbS5kaXNwbGF5ID0gcHNob3c7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKG9iai5yZWxhdG8pew0KICAgICAgICBpZihvYmoucmVsYXRvLmRpc3BsYXkhPT0gcHNob3cpew0KICAgICAgICAgICAgdmFyIHJlbGF0b3M9T2JqZWN0LmtleXMob2JqLnJlbGF0byk7DQogICAgICAgICAgICByZWxhdG9zLnNwbGljZShyZWxhdG9zLmluZGV4T2YoJ2Rpc3BsYXknKSwxKTsNCiAgICAgICAgICAgIGZvcih2YXIgaz0wO2s8cmVsYXRvcy5sZW5ndGg7aysrKXsNCiAgICAgICAgICAgICAgICB2YXIgZD1yZWxhdG9zW2tdOw0KICAgICAgICAgICAgICAgIGV4dHJhUmVsYVtkXS5pc0M9dHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIG9iai5yZWxhdG8uZGlzcGxheSA9IHBzaG93Ow0KICAgICAgICB9DQogICAgfQ0KICAgIGlmKG9iai5jYWxsKXsNCiAgICAgICAgdmFyIGNhbGxzPU9iamVjdC5rZXlzKG9iai5jYWxsKTsNCiAgICAgICAgaWYoY2hlY2tJRCE9PW9iail7DQogICAgICAgICAgICBmb3IodmFyIGk9MDtpIDwgY2FsbHMubGVuZ3RoO2krKyl7DQogICAgICAgICAgICAgICAgdmFyIGE9Y2FsbHNbaV0uc2xpY2UoMSk7DQogICAgICAgICAgICAgICAgdmFyIGI9b2JqLmNhbGxbY2FsbHNbaV1dOw0KICAgICAgICAgICAgICAgIHZhciBjPWIudG9ndHlwZTsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKS5zdHlsZS5kaXNwbGF5PXNob3c7DQogICAgICAgICAgICAgICAgaWYgKGIucmVsYWZyb20mJiFjKXsNCiAgICAgICAgICAgICAgICAgICAgaWYoYi5yZWxhZnJvbS5kaXNwbGF5IT09IHNob3cpew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGFmcm9tcz1PYmplY3Qua2V5cyhiLnJlbGFmcm9tKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGFmcm9tcy5zcGxpY2UocmVsYWZyb21zLmluZGV4T2YoJ2Rpc3BsYXknKSwxKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcih2YXIgaz0wO2s8cmVsYWZyb21zLmxlbmd0aDtrKyspew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkPXJlbGFmcm9tc1trXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYVJlbGFbZF0uaXNDPXRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBiLnJlbGFmcm9tLmRpc3BsYXkgPSBzaG93Ow0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChiLnJlbGF0byYmIWMpew0KICAgICAgICAgICAgICAgICAgICBpZihiLnJlbGF0by5kaXNwbGF5IT09IHNob3cpew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGF0b3M9T2JqZWN0LmtleXMoYi5yZWxhdG8pOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRvcy5zcGxpY2UocmVsYXRvcy5pbmRleE9mKCdkaXNwbGF5JyksMSk7DQogICAgICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGs9MDtrPHJlbGF0b3MubGVuZ3RoO2srKyl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQ9cmVsYXRvc1trXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYVJlbGFbZF0uaXNDPXRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBiLnJlbGF0by5kaXNwbGF5ID0gc2hvdzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZihjKXsNCiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOnRvZ3RvcGljaWQ9JyIrYSsiJ10iKS5zdHlsZS5kaXNwbGF5PXNob3c7DQogICAgICAgICAgICAgICAgICAgIGlmKGM9PT0nbWludXMnKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIHV0ZChiLGEsc2hvdykNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoKGIuY2FsbHx8Yi5ib3VuZGFyeXx8Yi5zdW1tYXJ5KSYmYz09PSdwbHVzJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdXRkKGIsYSxzaG93LHRydWUpDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYoYi5jYWxsJiYhYykgew0KICAgICAgICAgICAgICAgICAgICB1dGQoYixhLHNob3csdHJ1ZSkNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKGIuc3VtbWFyeSYmIWMpIHsNCiAgICAgICAgICAgICAgICAgICAgdXRkKGIsYSxzaG93KQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoYi5ib3VuZGFyeSYmIWMpIHsNCiAgICAgICAgICAgICAgICAgICAgdXRkKGIsYSxzaG93KQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIGlmKG9iai5zdW1tYXJ5KXsNCiAgICAgICAgdmFyIHN1bW1hcnlzPU9iamVjdC5rZXlzKG9iai5zdW1tYXJ5KTsNCiAgICAgICAgaWYoKGNoZWNrSUQhPT1vYmomJihvYmoudG9ndHlwZT09PSdtaW51cyd8fCFvYmoudG9ndHlwZSkpfHxjaGVja0lEPT09b2JqKXsNCiAgICAgICAgICAgIGZvcih2YXIgaT0wO2k8c3VtbWFyeXMubGVuZ3RoO2krKyl7DQogICAgICAgICAgICAgICAgdmFyIGE9c3VtbWFyeXNbaV0uc2xpY2UoMSk7DQogICAgICAgICAgICAgICAgdmFyIGI9b2JqLnN1bW1hcnlbc3VtbWFyeXNbaV1dOw0KICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGEpOw0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpLnN0eWxlLmRpc3BsYXk9c2hvdzsNCi8vICAgICAgICAgICAgICAgIGlmKGMpew0KLy8gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDp0b2d0b3BpY2lkPSciK2ErIiddIikuc3R5bGUuZGlzcGxheT1zaG93Ow0KLy8gICAgICAgICAgICAgICAgICAgIGlmKGM9PT0nbWludXMnKXsNCi8vICAgICAgICAgICAgICAgICAgICAgICAgdXRkKGIsc2hvdykNCi8vICAgICAgICAgICAgICAgICAgICB9DQovLyAgICAgICAgICAgICAgICAgICAgaWYgKGIuY2FsbCYmYz09PSdwbHVzJykgew0KLy8gICAgICAgICAgICAgICAgICAgICAgICB1dGQoYixzaG93LHRydWUpDQovLyAgICAgICAgICAgICAgICAgICAgfQ0KLy8gICAgICAgICAgICAgICAgfQ0KLy8gICAgICAgICAgICAgICAgaWYoYi5jYWxsJiYhYykgew0KLy8gICAgICAgICAgICAgICAgICAgIHV0ZChiLHNob3csdHJ1ZSkNCi8vICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZihPYmplY3Qua2V5cyhiKS5sZW5ndGghPT0wKXsNCiAgICAgICAgICAgICAgICAgICAgdXRkKGIsYSxzaG93KQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZihvYmouYm91bmRhcnkpew0KICAgICAgICB2YXIgYm91bmRhcnlzPU9iamVjdC5rZXlzKG9iai5ib3VuZGFyeSk7DQogICAgICAgIGlmKGNoZWNrSUQhPT1vYmopew0KICAgICAgICAgICAgZm9yKHZhciBpPTA7aTxib3VuZGFyeXMubGVuZ3RoO2krKyl7DQogICAgICAgICAgICAgICAgdmFyIGE9Ym91bmRhcnlzW2ldLnNsaWNlKDEpOw0KICAgICAgICAgICAgICAgIHZhciBiPW9iai5ib3VuZGFyeVtib3VuZGFyeXNbaV1dOw0KICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGEpOw0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpLnN0eWxlLmRpc3BsYXk9c2hvdzsNCi8vICAgICAgICAgICAgICAgIGlmKGMpew0KLy8gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDp0b2d0b3BpY2lkPSciK2ErIiddIikuc3R5bGUuZGlzcGxheT1zaG93Ow0KLy8gICAgICAgICAgICAgICAgICAgIGlmKGM9PT0nbWludXMnKXsNCi8vICAgICAgICAgICAgICAgICAgICAgICAgdXRkKGIsc2hvdykNCi8vICAgICAgICAgICAgICAgICAgICB9DQovLyAgICAgICAgICAgICAgICAgICAgaWYgKGIuY2FsbCYmYz09PSdwbHVzJykgew0KLy8gICAgICAgICAgICAgICAgICAgICAgICB1dGQoYixzaG93LHRydWUpDQovLyAgICAgICAgICAgICAgICAgICAgfQ0KLy8gICAgICAgICAgICAgICAgfQ0KLy8gICAgICAgICAgICAgICAgaWYoYi5jYWxsJiYhYykgew0KLy8gICAgICAgICAgICAgICAgICAgIHV0ZChiLHNob3csdHJ1ZSkNCi8vICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZihPYmplY3Qua2V5cyhiKS5sZW5ndGghPT0wKXsNCiAgICAgICAgICAgICAgICAgICAgdXRkKGIsYSxzaG93KQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZighb2MmJm9iai5jaGlsZCkgew0KICAgICAgICB2YXIgY2hpbGRzID0gT2JqZWN0LmtleXMob2JqLmNoaWxkKTsNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBhID0gY2hpbGRzW2ldLnNsaWNlKDEpOw0KICAgICAgICAgICAgdmFyIGIgPSBvYmouY2hpbGRbY2hpbGRzW2ldXTsNCiAgICAgICAgICAgIHZhciBjID0gYi50b2d0eXBlOw0KICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkuc3R5bGUuZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICBpZiAoYi5yZWxhZnJvbSYmIWMpew0KICAgICAgICAgICAgICAgIGlmKGIucmVsYWZyb20uZGlzcGxheSE9PSBzaG93KXsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGFmcm9tcz1PYmplY3Qua2V5cyhiLnJlbGFmcm9tKTsNCiAgICAgICAgICAgICAgICAgICAgcmVsYWZyb21zLnNwbGljZShyZWxhZnJvbXMuaW5kZXhPZignZGlzcGxheScpLDEpOw0KICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGs9MDtrPHJlbGFmcm9tcy5sZW5ndGg7aysrKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkPXJlbGFmcm9tc1trXTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhUmVsYVtkXS5pc0M9dHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBiLnJlbGFmcm9tLmRpc3BsYXkgPSBzaG93Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChiLnJlbGF0byYmIWMpew0KICAgICAgICAgICAgICAgIGlmKGIucmVsYXRvLmRpc3BsYXkhPT0gc2hvdyl7DQogICAgICAgICAgICAgICAgICAgIHZhciByZWxhdG9zPU9iamVjdC5rZXlzKGIucmVsYXRvKTsNCiAgICAgICAgICAgICAgICAgICAgcmVsYXRvcy5zcGxpY2UocmVsYXRvcy5pbmRleE9mKCdkaXNwbGF5JyksMSk7DQogICAgICAgICAgICAgICAgICAgIGZvcih2YXIgaz0wO2s8cmVsYXRvcy5sZW5ndGg7aysrKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkPXJlbGF0b3Nba107DQogICAgICAgICAgICAgICAgICAgICAgICBleHRyYVJlbGFbZF0uaXNDPXRydWU7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgYi5yZWxhdG8uZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKGMpIHsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6dG9ndG9waWNpZD0nIiArIGEgKyAiJ10iKS5zdHlsZS5kaXNwbGF5ID0gc2hvdzsNCiAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJ21pbnVzJykgew0KICAgICAgICAgICAgICAgICAgICB1dGQoYixhLHNob3cpDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgoYi5jYWxsfHxiLmJvdW5kYXJ5fHxiLnN1bW1hcnkpJiZjPT09J3BsdXMnKSB7DQogICAgICAgICAgICAgICAgICAgIHV0ZChiLGEsc2hvdyx0cnVlKQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChiLmNhbGwmJiFjKSB7DQogICAgICAgICAgICAgICAgdXRkKGIsYSxzaG93LHRydWUpDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoYi5zdW1tYXJ5JiYhYykgew0KICAgICAgICAgICAgICAgIHV0ZChiLGEsc2hvdykNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChiLmJvdW5kYXJ5JiYhYykgew0KICAgICAgICAgICAgICAgIHV0ZChiLGEsc2hvdykNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCn0NCg0KZnVuY3Rpb24gZXh0cmFSZWxhRmluKCkgew0KICAgIHZhciBleHRyYWtleXM9T2JqZWN0LmtleXMoZXh0cmFSZWxhKTsNCiAgICBmb3IodmFyIGk9MDtpPGV4dHJha2V5cy5sZW5ndGg7aSsrKXsNCiAgICAgICAgdmFyIGV4dHJhT2JqPWV4dHJhUmVsYVtleHRyYWtleXNbaV1dOw0KICAgICAgICBpZihleHRyYU9iai5pc0MgPT09IHRydWUpew0KICAgICAgICAgICAgdmFyIGZzaG93PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGV4dHJhT2JqLmZyb21pZCkuc3R5bGUuZGlzcGxheSAhPT0nbm9uZSc/IHRydWU6IGZhbHNlOw0KICAgICAgICAgICAgdmFyIHRzaG93PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGV4dHJhT2JqLnRvaWQpLnN0eWxlLmRpc3BsYXkgIT09J25vbmUnPyB0cnVlOiBmYWxzZTsNCiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGV4dHJhT2JqLmlkKS5zdHlsZS5kaXNwbGF5PWZzaG93ICYmIHRzaG93PyAnYmxvY2snOiAnbm9uZSc7DQogICAgICAgICAgICBleHRyYVJlbGFbZXh0cmFrZXlzW2ldXS5pc0MgPSBmYWxzZTsNCiAgICAgICAgfQ0KICAgIH0NCn0='))</script>
  </body>
</html>
